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

李錦俊(mybios)的blog

游戲開發(fā) C++ Cocos2d-x OpenGL DirectX 數(shù)學(xué) 計(jì)算機(jī)圖形學(xué) SQL Server

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

公告

QQ:30743734
EMain:mybios@qq.com

常用鏈接

留言簿(16)

我參與的團(tuán)隊(duì)

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 372566
  • 排名 - 67

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

昨天提到的我想到了個(gè)優(yōu)化渲染的新方法。。今天花了一個(gè)早上終于實(shí)現(xiàn)了。5555其實(shí)不需要這么久,偏偏是一個(gè)小小的BUG花了我兩個(gè)小時(shí)。馬上進(jìn)入正題吧。

原來的GUI渲染系統(tǒng)是每個(gè)Window都繼承于RenderCache,每個(gè)RenderCache中保存著需要渲染的矩形信息,然后每幀渲染的時(shí)候一個(gè)個(gè)矩形添加到渲染器中再動(dòng)態(tài)修改頂點(diǎn)坐標(biāo)(一個(gè)矩形對(duì)應(yīng)6個(gè)頂點(diǎn))。慢就慢在動(dòng)態(tài)修改頂點(diǎn)!
今天實(shí)現(xiàn)的新方法,就是直接把頂點(diǎn)保存在RenderCache中,然后每幀渲染的時(shí)候直接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

//?四個(gè)角的顏色
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;
????}

}
;


//?一個(gè)頂點(diǎn)
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;????????????
//?頂點(diǎn)的位置
????float??m_rhw;????????????????//?始終設(shè)置為1
????GC3DCOLOR?m_diffuse;????????????//?顏色
????Vector2?m_uv;????????????????//?貼圖坐標(biāo)
????Texture*?m_pTexture;????????//?紋理
}
;

//?需要渲染的隊(duì)列的一個(gè)方塊
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:
????
//?不允許顯式創(chuàng)建,只可以繼承
????GUIRenderCache(void);
public:
????
virtual?~GUIRenderCache(void);

????
//?添加到渲染隊(duì)列,支持很多版本的重載
????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);
????}

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


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

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

????}

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

????ListGUIRenderQuad?m_listGUIRenderQuad;????
//?渲染隊(duì)列
????bool?m_bDirty;????????????????????????????//?需要重新Cache需要渲染的項(xiàng)目
}
;


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

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


GUIRenderCache::
~GUIRenderCache(void)
{
}



//?渲染需要Cache隊(duì)列
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) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 3D引擎開發(fā)

Feedback

# re: 3D 引擎中的 GUI 渲染優(yōu)化補(bǔ)完 2006-12-24 20:15 李錦俊
哦。是了。其中用到的Array是IrrLicht引擎中的irr::core::array模板類  回復(fù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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久久国产综合久久蜜月精品 | 欧美国产另类| 亚洲少妇最新在线视频| 亚洲天堂成人在线观看| 国产人成一区二区三区影院| 久久午夜羞羞影院免费观看| 欧美.com| 午夜电影亚洲| 久久综合亚洲社区| 亚洲网站视频| 久久精品日产第一区二区| 亚洲精品国产欧美| 妖精视频成人观看www| 国产欧亚日韩视频| 欧美激情欧美激情在线五月| 欧美日韩国产综合久久| 久久青草久久| 国产精品igao视频网网址不卡日韩| 欧美一区二区黄| 你懂的国产精品永久在线| 亚洲综合成人婷婷小说| 久久久亚洲国产天美传媒修理工| 亚洲视频第一页| 久久这里有精品视频| 亚洲视频电影图片偷拍一区| 久久国产手机看片| 亚洲一区二区三区色| 久久久免费精品| 午夜精品在线观看| 欧美精品123区| 欧美凹凸一区二区三区视频| 国产精品久久97| 亚洲国产精品一区二区第一页 | 亚洲国产精品福利| 欧美在线在线| 香蕉亚洲视频| 欧美日韩黄视频| 欧美激情网友自拍| 激情久久久久久久| 亚洲自拍另类| 亚洲欧美视频在线观看视频| 欧美日韩视频一区二区| 欧美激情偷拍| 亚洲国产日韩一级| 久久免费视频这里只有精品| 欧美一区二区三区婷婷月色 | 国产精品综合不卡av| 亚洲区中文字幕| 亚洲精品国产无天堂网2021| 久久精品网址| 久久日韩精品| 国产亚洲精品aa午夜观看| 亚洲午夜精品久久久久久浪潮| 99re这里只有精品6| 欧美久久久久久久久久| 亚洲三级网站| 99ri日韩精品视频| 欧美日韩视频第一区| 亚洲美女视频网| 一本色道久久综合亚洲精品婷婷| 欧美黄色日本| 亚洲欧洲日产国产综合网| 91久久在线观看| 欧美大片在线观看一区| 亚洲欧洲日韩综合二区| 99在线精品观看| 欧美三级视频| 亚洲午夜国产一区99re久久| 性色av香蕉一区二区| 国产日韩久久| 久久先锋影音av| 亚洲激情六月丁香| 亚洲在线一区| 国产亚洲高清视频| 蜜臀av在线播放一区二区三区| 亚洲国产va精品久久久不卡综合| 亚洲国产日韩欧美| 欧美四级在线观看| 欧美一区二区在线看| 欧美成人亚洲成人日韩成人| 99国产精品一区| 国产精品久久一级| 久久在线视频| avtt综合网| 久久久久久久久久久久久女国产乱| 在线观看不卡av| 欧美视频在线观看| 久久aⅴ国产欧美74aaa| 亚洲国产另类久久精品| 亚洲欧美在线x视频| …久久精品99久久香蕉国产| 欧美久久成人| 久久成人资源| 亚洲日本免费| 久久精品亚洲精品| 亚洲最快最全在线视频| 国产区日韩欧美| 欧美极品影院| 久久都是精品| 亚洲视频播放| 欧美激情一区二区三区不卡| 亚洲欧美日韩一区二区三区在线观看 | 亚洲日本理论电影| 国产精品一二三视频| 麻豆精品网站| 欧美在线中文字幕| 亚洲一区二区精品在线| 欧美大色视频| 久久不射2019中文字幕| av成人黄色| 亚洲第一成人在线| 国产亚洲成精品久久| 欧美三级黄美女| 六月婷婷一区| 久久精品视频网| 亚洲欧美国产精品桃花| 亚洲人成网站999久久久综合| 久久久亚洲综合| 欧美一区深夜视频| 亚洲欧美视频在线观看| 亚洲图片欧洲图片日韩av| 亚洲精品1234| 亚洲高清视频一区| 国语自产精品视频在线看一大j8 | 在线精品国精品国产尤物884a| 国产噜噜噜噜噜久久久久久久久| 欧美日韩精品高清| 欧美另类一区| 欧美伦理91| 免费观看一级特黄欧美大片| 久久福利影视| 久久国产精彩视频| 久久精品日产第一区二区| 久久精彩视频| 久久精品日产第一区二区| 欧美一区91| 久久久精品免费视频| 久久男人av资源网站| 美女精品自拍一二三四| 美乳少妇欧美精品| 欧美国产日韩在线| 欧美日韩一区国产| 国产精品福利在线观看| 国产区精品视频| 黄色成人免费网站| 亚洲高清色综合| 99日韩精品| 亚洲在线中文字幕| 久久久国产精品亚洲一区| 免费不卡中文字幕视频| 欧美激情91| 亚洲看片一区| 午夜视黄欧洲亚洲| 美女日韩欧美| 欧美日韩高清在线| 国产日韩欧美不卡在线| 一区二区三区在线观看欧美| 亚洲国产日韩综合一区| 一本久道久久综合中文字幕| 午夜性色一区二区三区免费视频| 久久久.com| 亚洲国产精品ⅴa在线观看 | 麻豆91精品91久久久的内涵| 亚洲日韩第九十九页| 亚洲一区二区成人在线观看| 欧美在线视频全部完| 欧美精品一区二区三区很污很色的| 欧美亚洲成人网| 亚洲第一二三四五区| 亚洲午夜精品在线| 久久午夜激情| 99精品热视频只有精品10| 欧美在线观看天堂一区二区三区| 欧美激情视频免费观看| 国产欧美短视频| 日韩一区二区免费高清| 久久另类ts人妖一区二区| 亚洲精品国产日韩| 久久精品国产在热久久| 欧美精品在线观看| 精品99一区二区三区| 亚洲一区亚洲| 亚洲国产精品一区| 久久九九国产精品| 国产精品久久久久久五月尺| 亚洲第一福利视频| 久久成人人人人精品欧| 亚洲精品久久久久久下一站| 欧美在线黄色| 国产区亚洲区欧美区| 亚洲一区二区三区成人在线视频精品| 美女图片一区二区| 亚洲免费综合| 国产精品精品视频| 国产精品99久久久久久有的能看| 欧美成在线视频|