青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

李錦俊(mybios)的blog

游戲開發 C++ Cocos2d-x OpenGL DirectX 數學 計算機圖形學 SQL Server

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

公告

QQ:30743734
EMain:mybios@qq.com

常用鏈接

留言簿(16)

我參與的團隊

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 372566
  • 排名 - 67

最新評論

閱讀排行榜

評論排行榜

昨天提到的我想到了個優化渲染的新方法。。今天花了一個早上終于實現了。5555其實不需要這么久,偏偏是一個小小的BUG花了我兩個小時。馬上進入正題吧。

原來的GUI渲染系統是每個Window都繼承于RenderCache,每個RenderCache中保存著需要渲染的矩形信息,然后每幀渲染的時候一個個矩形添加到渲染器中再動態修改頂點坐標(一個矩形對應6個頂點)。慢就慢在動態修改頂點!
今天實現的新方法,就是直接把頂點保存在RenderCache中,然后每幀渲染的時候直接DrawIndexedPrimitiveUP出來,Release版速度從500提升到550FPS了。DEBUG版從130提升到360FPS(主要是stl的東西在debug版下慢許多)。

貼下RenderCache的代碼

h文件
#pragma?once
#include?
"GameCorePreReq.h"
#include?
"Rect.h"
#include?
"ListHelper.h"
#include?
"GCVector3.h"
#include?
"GCVector2.h"
#include?
"GCArray.h"


#define?GUI_Z?0.0f

//?四個角的顏色
struct?BoundsColor
{
????BoundsColor(
????????GC3DCOLOR?crTopLeft?,?
????????GC3DCOLOR?crTopRight?,?
????????GC3DCOLOR?crBottomLeft?,?
????????GC3DCOLOR?crBottomRight
????????)
????????:?m_crTopLeft(crTopLeft)
????????,?m_crTopRight(crTopRight)
????????,?m_crBottomLeft(crBottomLeft)
????????,?m_crBottomRight(crBottomRight)
????
{

????}
;

????BoundsColor(GC3DCOLOR?color)
????????:?m_crTopLeft(color)
????????,?m_crTopRight(color)
????????,?m_crBottomLeft(color)
????????,?m_crBottomRight(color)
????
{

????}
;

????BoundsColor(
const?BoundsColor?&color)
????
{
????????
*this?=?color;
????}
;

????BoundsColor()
{};

????
void?SetRefAlpha(const?float?&fAlpha)
????
{
????????GC3DCOLOR_SETA(m_crTopLeft?,?GC3DCOLOR_GETA(m_crTopLeft)?
*?fAlpha);
????????GC3DCOLOR_SETA(m_crTopRight?,?GC3DCOLOR_GETA(m_crTopRight)?
*?fAlpha);
????????GC3DCOLOR_SETA(m_crBottomLeft?,?GC3DCOLOR_GETA(m_crBottomLeft)?
*?fAlpha);
????????GC3DCOLOR_SETA(m_crBottomRight?,?GC3DCOLOR_GETA(m_crBottomRight)?
*?fAlpha);
????}


????
void?SetAlpha(const?float?&fAlpha)
????
{
????????GC3DCOLOR_SETA(m_crTopLeft?,?fAlpha);
????????GC3DCOLOR_SETA(m_crTopRight?,?fAlpha);
????????GC3DCOLOR_SETA(m_crBottomLeft?,?fAlpha);
????????GC3DCOLOR_SETA(m_crBottomRight?,?fAlpha);
????}

????GC3DCOLOR?m_crTopLeft;
????GC3DCOLOR?m_crTopRight;
????GC3DCOLOR?m_crBottomLeft;
????GC3DCOLOR?m_crBottomRight;

????BoundsColor?
&?operator?=(const?BoundsColor&?color)
????
{
????????m_crTopLeft?
=?color.m_crTopLeft;
????????m_crTopRight?
=?color.m_crTopRight;
????????m_crBottomLeft?
=?color.m_crBottomLeft;
????????m_crBottomRight?
=?color.m_crBottomRight;
????????
return?*this;
????}

}
;


//?一個頂點
struct?QuadVertex
{
????QuadVertex(f32?x?,?f32?y?,?GC3DCOLOR?color?,?f32?ux?,?f32?uy?,?Texture?
*pTexture)
????????:?m_pos(x?,?y?,?GUI_Z)
????????,?m_rhw(
1)
????????,?m_diffuse(color)
????????,?m_uv(ux?,?uy)
????????,?m_pTexture(pTexture)
????
{

????}
;
????Vector3?m_pos;????????????
//?頂點的位置
????float??m_rhw;????????????????//?始終設置為1
????GC3DCOLOR?m_diffuse;????????????//?顏色
????Vector2?m_uv;????????????????//?貼圖坐標
????Texture*?m_pTexture;????????//?紋理
}
;

//?需要渲染的隊列的一個方塊
struct?GUIRenderQuad
{
????GUIRenderQuad(
const?Rect&?rectDest,?const?BoundsColor&?boundsColor,?Texture*?pTexture,?const?RectFloat?&rectTexture)
????????:?m_topLeft(rectDest.left?,?rectDest.top?,?boundsColor.m_crTopLeft?,?rectTexture.left?,?rectTexture.top?,?pTexture)
????????,?m_topRight(rectDest.right?,?rectDest.top?,?boundsColor.m_crTopRight?,?rectTexture.right?,?rectTexture.top?,?pTexture)
????????,?m_bottomLeft(rectDest.left?,?rectDest.bottom?,?boundsColor.m_crBottomLeft?,?rectTexture.left?,?rectTexture.bottom?,?pTexture)
????????,?m_bottomRight(rectDest.right?,?rectDest.bottom?,?boundsColor.m_crBottomRight?,?rectTexture.right?,?rectTexture.bottom?,?pTexture)
????
{

????}
;
????QuadVertex?m_topLeft;
????QuadVertex?m_topRight;
????QuadVertex?m_bottomLeft;
????QuadVertex?m_bottomRight;
}
;

typedef?Array
<GUIRenderQuad>?ListGUIRenderQuad;

class?GAMECORE_EXPORT?GUIRenderCache
{
protected:
????
//?不允許顯式創建,只可以繼承
????GUIRenderCache(void);
public:
????
virtual?~GUIRenderCache(void);

????
//?添加到渲染隊列,支持很多版本的重載
????void?AddCache(const?Rect&?rectDest,?const?BoundsColor&?boundsColor,?Texture*?pTexture,?const?RectFloat?&rectTexture)
????
{
????????AddCache(GUIRenderQuad(rectDest?,?boundsColor?,?pTexture?,?rectTexture));
????}
;
????
void?AddCache(const?Rect&?rectDest,?const?BoundsColor&?boundsColor,?Texture*?pTexture)
????
{
????????AddCache(GUIRenderQuad(rectDest?,?boundsColor?,?pTexture?,?RectFloat(
0,0,1,1)));
????}
;
????
void?AddCache(const?Rect&?rectDest,?const?BoundsColor&?boundsColor)
????
{
????????AddCache(GUIRenderQuad(rectDest?,?boundsColor?,?
0?,?RectFloat(0,0,1,1)));
????}
;
????
void?AddCache(const?GUIRenderQuad?*quadPtr)
????
{
????????AddCache(
*quadPtr);
????}

????
void?AddCache(const?GUIRenderQuad&?quad)
????
{
????????m_listGUIRenderQuad.push_back(quad);
????}

????
//?渲染到隊列
????void?RenderCache();
????
//?直接渲染
????void?RenderDirect();
????
//?清空cache隊列
????void?ClearCacheList(void)
????
{
????????m_listGUIRenderQuad.clear();
????}


????
void?SetDirty(bool?bDirty){m_bDirty?=?bDirty;};
????
const?bool?IsDirty()?const{return?m_bDirty;};
protected:

????
void?Cache()
????
{
????????
//?從新Cache隊列
????????if(m_bDirty)
????????
{
????????????ClearCacheList();
????????????DoCache();
????????????m_bDirty?
=?false;
????????}

????}

????
//?Cache需要渲染的項目
????virtual?void?DoCache(){};

????ListGUIRenderQuad?m_listGUIRenderQuad;????
//?渲染隊列
????bool?m_bDirty;????????????????????????????//?需要重新Cache需要渲染的項目
}
;


cpp文件
#include?"GameCorePreReq.h"
#include?
"GUIRenderCache.h"
#include?
"Systems.h"
#include?
"GUIRendererSystem.h"

GUIRenderCache::GUIRenderCache(
void)
:?m_bDirty(
true)
{
}


GUIRenderCache::
~GUIRenderCache(void)
{
}



//?渲染需要Cache隊列
void?GUIRenderCache::RenderCache()
{
????Cache();
????
if(m_listGUIRenderQuad.empty())
????????
return;
????ListGUIRenderQuad?
*pQuad?=?&m_listGUIRenderQuad;
????Systems::GetSingleton().GetGUIRendererSystem()
->PushBack(pQuad);
}


void?GUIRenderCache::RenderDirect()
{
????Cache();
????
if(m_listGUIRenderQuad.empty())
????????
return;
????Systems::GetSingleton().GetGUIRendererSystem()
->RenderDirect(&m_listGUIRenderQuad);
}
posted on 2006-12-24 14:14 李錦俊(mybios) 閱讀(3868) 評論(1)  編輯 收藏 引用 所屬分類: 3D引擎開發

Feedback

# re: 3D 引擎中的 GUI 渲染優化補完 2006-12-24 20:15 李錦俊
哦。是了。其中用到的Array是IrrLicht引擎中的irr::core::array模板類  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99国产一区| 日韩午夜免费| 欧美一区二区三区婷婷月色 | 亚洲欧美日韩国产综合精品二区 | 老司机午夜精品视频在线观看| 欧美一区二区黄色| 一区二区在线观看视频| 亚洲国产精品电影在线观看| 欧美精品999| 欧美一区二区视频在线观看2020| 欧美专区在线观看| 亚洲七七久久综合桃花剧情介绍| 99视频有精品| 激情欧美一区二区| 亚洲日本免费| 国产亚洲人成a一在线v站| 欧美不卡视频一区| 欧美三区在线观看| 麻豆国产va免费精品高清在线| 麻豆精品在线视频| 亚洲男女自偷自拍| 久久精品视频免费播放| 亚洲视频在线看| 久久精品九九| 午夜激情亚洲| 欧美激情女人20p| 久久久99免费视频| 欧美日韩国产在线一区| 久久日韩粉嫩一区二区三区| 欧美日韩一区二区视频在线 | 亚洲欧美国产日韩中文字幕| 久久亚洲综合色| 午夜亚洲影视| 欧美日韩一区二区精品| 蜜桃久久av一区| 国产精品无码永久免费888| 欧美激情精品久久久久久| 国产欧美日本一区二区三区| 亚洲精品一区二| 在线视频国产日韩| 欧美中文在线免费| 午夜精品久久久久久久久久久久久 | 国产网站欧美日韩免费精品在线观看 | 欧美亚洲视频一区二区| 欧美国产专区| 欧美a级理论片| 国产欧美激情| 亚洲综合电影一区二区三区| 在线中文字幕不卡| 久久综合久久综合久久综合| 久久se精品一区精品二区| 欧美视频网站| 正在播放日韩| 亚洲男人的天堂在线观看| 欧美日韩国产美| 亚洲精品日韩在线| 在线一区免费观看| 欧美色播在线播放| 一区二区高清| 亚洲免费在线视频| 国产精品白丝黑袜喷水久久久| 99re热这里只有精品免费视频| 亚洲美女诱惑| 国产精品v欧美精品v日本精品动漫 | 亚洲伊人色欲综合网| 欧美午夜精品久久久久免费视| 亚洲麻豆一区| 午夜精品福利电影| 国产日韩欧美综合| 久久精品国产久精国产一老狼| 久久亚洲影音av资源网| 狠狠久久婷婷| 欧美xart系列高清| 日韩亚洲精品视频| 亚洲欧美日韩国产成人| 国产精品一区二区你懂的| 欧美一区二区三区另类| 老司机精品福利视频| 亚洲黄色免费网站| 欧美日韩精品国产| 亚洲影视综合| 男人插女人欧美| 一区二区三区欧美激情| 国产精品日韩| 久久三级福利| 一区二区三区四区五区在线| 久久久国产精品一区二区三区| 亚洲夫妻自拍| 国产精品ⅴa在线观看h| 久久精品系列| 亚洲最新视频在线播放| 久久精品免费观看| 亚洲日本欧美日韩高观看| 国产精品久久久久91| 久久精品国产综合| 日韩天堂在线观看| 久久伊人免费视频| 亚洲视频一二区| 一区二区三区在线视频观看| 欧美日韩免费一区| 久久精品一区二区国产| 日韩一级免费| 欧美激情免费在线| 久久国产精品黑丝| 99精品免费网| 亚洲大片av| 国产精品欧美日韩久久| 欧美二区在线看| 久久久成人网| 亚洲欧美日韩天堂一区二区| 亚洲国产婷婷综合在线精品 | 欧美va日韩va| 久久精品99国产精品日本| av成人老司机| 亚洲欧洲一二三| 在线成人激情| 国产香蕉久久精品综合网| 欧美视频在线一区二区三区| 嫩草国产精品入口| 久久久国产一区二区三区| 国产亚洲精品福利| 国产精品乱码一区二三区小蝌蚪| 六月丁香综合| 久久婷婷久久| 久久久久久电影| 欧美一区二区三区喷汁尤物| 中文在线资源观看视频网站免费不卡| 亚洲国产精品va在看黑人| 另类酷文…触手系列精品集v1小说| 午夜在线一区二区| 亚洲一品av免费观看| 99精品国产一区二区青青牛奶| 亚洲黄色视屏| 亚洲欧洲另类国产综合| 91久久国产综合久久91精品网站| 国产综合av| 国内自拍一区| 很黄很黄激情成人| 黄色亚洲网站| 在线播放亚洲一区| 亚洲国产精品va在看黑人| 在线观看欧美一区| 亚洲国产视频一区二区| 亚洲黄色在线观看| 日韩亚洲欧美成人| 这里只有精品丝袜| 香蕉久久夜色精品国产| 欧美呦呦网站| 久久综合国产精品| 欧美激情一区二区三区高清视频| 欧美国产日韩在线| 亚洲黄色一区| 亚洲深夜影院| 欧美一区久久| 欧美96在线丨欧| 欧美日韩一区二区在线| 国产精品亚洲精品| 狠狠v欧美v日韩v亚洲ⅴ| 91久久综合亚洲鲁鲁五月天| 日韩一级二级三级| 亚洲一区图片| 久久亚洲电影| 亚洲日本视频| 欧美亚洲在线观看| 欧美成人精品| 国产精品国产三级国产aⅴ入口| 国产日产欧美一区| 亚洲激情电影在线| 亚洲欧美一区二区三区久久 | 久久免费99精品久久久久久| 欧美激情第10页| 亚洲一区二区少妇| 美国十次成人| 国产伦精品一区二区三区在线观看 | 亚洲伦理自拍| 欧美中文字幕在线观看| 亚洲高清不卡av| 亚洲女同性videos| 欧美电影在线免费观看网站| 国产精品国产三级国产普通话三级 | 日韩亚洲视频| 久久精品国产免费| 亚洲久久成人| 久久婷婷亚洲| 国产三级欧美三级日产三级99| 亚洲人成人一区二区在线观看| 午夜精品久久久久| 亚洲国产精品久久久久久女王| 午夜视黄欧洲亚洲| 欧美日韩亚洲一区在线观看| 亚洲大胆女人| 久久裸体艺术| 亚洲精品乱码久久久久久按摩观| 欧美在线关看| 亚洲午夜精品视频| 欧美日韩一卡| av成人天堂| 亚洲国产老妈| 乱码第一页成人| 曰韩精品一区二区|