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

李錦俊(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>
            亚洲精品免费在线播放| 免费试看一区| 亚洲欧美日韩在线高清直播| 亚洲国产91精品在线观看| 美女爽到呻吟久久久久| 国产欧美在线播放| 国产老女人精品毛片久久| 国产精品女人久久久久久| 国产精品视频免费在线观看| 国产麻豆91精品| 樱桃成人精品视频在线播放| 亚洲精品综合久久中文字幕| 亚洲欧美国产不卡| 久久爱www久久做| 欧美成人综合网站| 一本色道久久综合亚洲精品小说 | 亚洲免费精品| 亚洲一区二区欧美日韩| 久久精品道一区二区三区| 欧美r片在线| 国产精品一区在线观看你懂的| 国内精品久久久久影院色| 日韩一区二区福利| 久久精品国产一区二区三区| 亚洲国产欧美一区| 亚洲一区999| 久久综合久久综合久久| 欧美性做爰猛烈叫床潮| 在线播放国产一区中文字幕剧情欧美| 中国女人久久久| 鲁大师成人一区二区三区| 亚洲国产欧美在线人成| 亚洲欧美在线免费| 欧美成人69av| 国产亚洲精品bv在线观看| 艳女tv在线观看国产一区| 欧美在线亚洲| 一区二区三区四区在线| 免费中文字幕日韩欧美| 国产一区av在线| 亚洲欧美一区二区三区在线 | 久久亚洲影音av资源网| 一区二区高清在线观看| 欧美激情第3页| 黄色综合网站| 久久久精品日韩| 亚洲一区二区精品视频| 欧美日韩亚洲一区二区三区在线观看 | 国产在线乱码一区二区三区| 在线视频日韩| 麻豆精品精品国产自在97香蕉| 国产精品视频xxxx| 一区二区三区日韩精品视频| 欧美大片在线影院| 久久婷婷国产麻豆91天堂| 国产一区二区无遮挡| 欧美一区网站| 亚洲永久免费| 国产久一道中文一区| 欧美一区免费| 久久av老司机精品网站导航| 国产麻豆91精品| 欧美中在线观看| 午夜精品福利电影| 国产日韩欧美中文在线播放| 香港成人在线视频| 午夜精品一区二区三区在线播放| 国产精品婷婷| 久久国产精品久久久久久| 亚洲欧美日韩视频二区| 国产免费亚洲高清| 久久久精品午夜少妇| 久久久久久久网站| 欧美尤物巨大精品爽| 亚洲欧洲一区二区天堂久久| 亚洲日本欧美| 久久这里有精品15一区二区三区| 久久精品女人天堂| 免费在线成人| 美女主播一区| 亚洲高清免费在线| 最新国产の精品合集bt伙计| 欧美精品黄色| 午夜精品久久| 久久一区二区精品| 亚洲午夜精品久久| 午夜在线一区| 亚洲激情二区| 亚洲午夜视频在线| 黄页网站一区| 99精品国产在热久久下载| 国产欧美一区二区三区国产幕精品| 久久久av水蜜桃| 欧美精品久久久久久久久久| 欧美一区二区高清在线观看| 久久综合九色综合欧美就去吻| 亚洲桃花岛网站| 久久精品免费| aa日韩免费精品视频一| 亚洲欧美一区二区精品久久久| 在线成人激情黄色| 中文av字幕一区| 在线日韩电影| 亚洲欧美日本国产有色| 亚洲国产成人精品女人久久久| 中国成人在线视频| 韩国成人福利片在线播放| 亚洲人成人99网站| 国产精品嫩草久久久久| 久久久精品国产一区二区三区 | 欧美三级精品| 久久国产视频网| 欧美另类一区| 欧美va日韩va| 国产日韩欧美在线观看| 亚洲另类在线一区| 亚洲国产三级在线| 香蕉国产精品偷在线观看不卡| 亚洲乱码久久| 久久久国产精品亚洲一区 | 国产嫩草影院久久久久| 欧美高清在线播放| 欧美日韩亚洲视频| 91久久精品美女| 亚洲第一福利视频| 欧美一区二区黄| 亚洲日本欧美| 一区二区三区自拍| 一本大道久久a久久精品综合| 在线免费高清一区二区三区| 欧美亚洲日本国产| 午夜欧美理论片| 欧美私人网站| 亚洲深夜福利网站| 亚洲欧美日韩一区二区| 国产精品国产三级国产专播精品人| 亚洲国产精品成人综合色在线婷婷 | 一区二区三区精品| 这里只有精品丝袜| 欧美日韩无遮挡| 99国产精品私拍| 亚洲视频在线观看网站| 欧美性大战久久久久久久蜜臀| 99成人精品| 性欧美办公室18xxxxhd| 国产无一区二区| 久久激情一区| 欧美国产免费| 99伊人成综合| 欧美日韩免费在线| 一片黄亚洲嫩模| 欧美一区二区在线| 狠狠色丁香婷婷综合影院| 久久精品一本| 亚洲福利av| 亚洲女女女同性video| 国产色产综合产在线视频| 久久久久一区| 亚洲乱码国产乱码精品精| 亚洲一区影音先锋| 国产综合久久久久久| 另类欧美日韩国产在线| 亚洲精品国产欧美| 欧美在线视频日韩| 亚洲狠狠婷婷| 欧美日韩国产精品专区| 亚洲国产精品高清久久久| 一本色道**综合亚洲精品蜜桃冫| 亚洲永久免费| 狠狠色丁香久久综合频道 | 999在线观看精品免费不卡网站| 亚洲性视频网址| 极品尤物久久久av免费看| 欧美国产一区二区在线观看| 亚洲私人黄色宅男| 久久综合久久综合久久| 一区二区三区高清在线观看| 国产欧美在线播放| 欧美黑人国产人伦爽爽爽| 亚洲一区二区三区激情| 亚洲第一天堂无码专区| 欧美一区二区三区免费视| 激情91久久| 国产精品一二三四| 欧美精品www在线观看| 久久激情婷婷| 亚洲一级影院| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产精品超碰97尤物18| 性欧美大战久久久久久久免费观看| 欧美丰满高潮xxxx喷水动漫| 亚洲欧美国产精品va在线观看 | 亚洲精品国产品国语在线app| 国产日产欧美a一级在线| 欧美裸体一区二区三区| 毛片av中文字幕一区二区| 欧美一乱一性一交一视频| 亚洲伦理精品| 亚洲国产精品毛片| 欧美国产日产韩国视频|