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

李錦俊(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>
            亚洲国产精品一区二区www| 亚洲高清在线精品| 欧美专区在线观看| 日韩亚洲欧美成人一区| 免费日韩av电影| 一区二区在线视频播放| 欧美一区二区在线视频| 一区二区三区鲁丝不卡| 欧美天天在线| 亚洲综合色网站| 在线亚洲美日韩| 国产精品国产a级| 一区二区三区四区精品| 亚洲精品国产精品久久清纯直播 | 国产精品国产三级国产普通话蜜臀| 亚洲国产精品久久| 欧美成人自拍| 欧美大胆人体视频| 日韩亚洲在线| 一区二区三区|亚洲午夜| 国产精品久久久久久福利一牛影视 | 欧美一区二区三区精品电影| 国产手机视频一区二区| 久久视频国产精品免费视频在线| 欧美综合激情网| 影音先锋亚洲精品| 欧美福利网址| 亚洲午夜av在线| 久久亚洲精品伦理| 久久夜色精品国产| 亚洲精品小视频在线观看| 亚洲日本欧美日韩高观看| 欧美日韩一级黄| 欧美在线你懂的| 久久久午夜视频| 日韩午夜激情| 亚洲免费综合| 亚洲国产天堂久久国产91| 亚洲精品在线视频| 国产精品一区二区久激情瑜伽| 久久久久成人精品| 欧美成人资源| 欧美一区亚洲二区| 久久一区亚洲| 亚洲欧美国产精品va在线观看 | 亚洲欧美文学| 亚洲国产精品日韩| 亚洲视频免费| 亚洲国产精品一区在线观看不卡| 亚洲欧洲在线观看| 国产亚洲亚洲| 亚洲精品老司机| 国产一区二区三区成人欧美日韩在线观看| 欧美成人午夜激情视频| 国产精品嫩草影院一区二区| 欧美激情精品久久久久久蜜臀 | 欧美精品尤物在线| 欧美一区二区三区视频在线| 鲁鲁狠狠狠7777一区二区| 国产精品久久久一区二区三区 | 欧美日韩人人澡狠狠躁视频| 久久er精品视频| 欧美激情成人在线| 久久久999精品免费| 欧美日韩午夜剧场| 欧美国产日韩一区| 国产欧美日韩在线观看| 最新精品在线| 91久久久久久久久| 久久精品国产v日韩v亚洲| 亚洲欧美日本在线| 欧美日韩国产三区| 亚洲第一中文字幕在线观看| 国产一区二区三区免费不卡 | 久久久久女教师免费一区| 亚洲欧美第一页| 欧美日韩色一区| 亚洲国产美国国产综合一区二区| 狠狠做深爱婷婷久久综合一区| 亚洲一区视频在线| 亚洲在线播放| 欧美wwwwww| 久久久国产午夜精品| 亚洲欧美另类在线| 欧美另类变人与禽xxxxx| 亚洲电影第三页| 亚洲国产精品精华液2区45| 久久免费午夜影院| 美女国内精品自产拍在线播放| 国产日韩欧美亚洲| 午夜久久久久久久久久一区二区| 亚洲宅男天堂在线观看无病毒| 欧美日韩国产精品一区二区亚洲| 欧美第一黄色网| 亚洲激情电影在线| 欧美成人精品在线观看| 亚洲国产精品成人综合色在线婷婷| 136国产福利精品导航网址| 久久精品人人爽| 欧美激情aaaa| 亚洲精品久久久久久一区二区| 久久综合久久综合九色| 亚洲高清色综合| aa级大片欧美| 国产精品videosex极品| 亚洲一级黄色片| 欧美在线一级视频| 国产精品一区二区久久久久| 午夜在线视频观看日韩17c| 久久在线免费观看| 亚洲国产精品视频一区| 欧美精品在线免费| 亚洲图中文字幕| 久久久国际精品| 亚洲国产精品成人精品| 欧美精品在线极品| 亚洲欧美日韩国产综合精品二区| 久久久久女教师免费一区| 亚洲国产精品小视频| 欧美女人交a| 欧美一级在线视频| 亚洲第一级黄色片| 亚洲在线观看免费视频| 国产一区二区三区视频在线观看 | 久久久不卡网国产精品一区| 欧美激情第10页| 亚洲一区三区电影在线观看| 国产一区二区三区在线免费观看| 欧美黄网免费在线观看| 亚洲天堂成人在线观看| 欧美成人性网| 亚洲欧美日韩一区在线| 在线精品一区| 国产精品任我爽爆在线播放 | 国产精品影院在线观看| 久久亚洲综合| 亚洲一级一区| 亚洲国产高清自拍| 久久精品一区二区三区不卡牛牛| 亚洲精品中文字幕女同| 国产亚洲欧美一区二区| 国产精品s色| 欧美精品1区| 久久成人免费网| 亚洲图片欧美一区| 亚洲免费观看高清完整版在线观看熊 | 91久久精品国产91久久| 亚洲久久视频| 老司机午夜免费精品视频| 一区二区日韩精品| 国模吧视频一区| 欧美日韩一区综合| 欧美风情在线| 久久成人久久爱| 亚洲欧美日韩在线综合| 日韩午夜电影| 亚洲国产二区| 欧美不卡在线视频| 久久精视频免费在线久久完整在线看| 日韩亚洲欧美高清| 最新热久久免费视频| 国内精品免费在线观看| 国产日韩欧美亚洲| 国产精品影院在线观看| 国产精品黄视频| 国产精品v欧美精品v日本精品动漫 | 欧美一级一区| 午夜精品一区二区三区在线播放| 日韩亚洲视频| 最近中文字幕日韩精品| 亚洲国产片色| 欧美激情在线狂野欧美精品| 免费永久网站黄欧美| 久久综合一区二区| 久久在线免费| 美女视频黄 久久| 久久综合网hezyo| 久久久久综合一区二区三区| 欧美在线视频免费| 久久成人av少妇免费| 欧美影院久久久| 久久久一本精品99久久精品66| 久久久噜噜噜久久中文字幕色伊伊| 欧美主播一区二区三区| 久久国产88| 老色鬼精品视频在线观看播放| 久久视频在线看| 欧美大片在线影院| 亚洲精品视频在线播放| 亚洲美洲欧洲综合国产一区| av成人天堂| 亚洲在线一区二区| 欧美在线视频全部完| 久久婷婷国产麻豆91天堂| 久久精品国产综合| 久色成人在线| 欧美午夜精品理论片a级大开眼界| 国产精品久久久久久模特| 国产欧美一二三区| 在线观看中文字幕不卡|