一直想用cegui,但是沒(méi)機(jī)會(huì)用,只是抽空看其代碼
最近聽(tīng)朋友說(shuō)0.7 debug下幀數(shù)提高100多,挺驚訝的,重新到久違了的官網(wǎng)上下了0.7.1
看了下渲染的實(shí)現(xiàn)(GL)
首先,添加了GeometryBuffer玩意,使得每個(gè)window保存了屬于自己的頂點(diǎn)和紋理信息
然后在RenderingSurface中有GeometryBuffer隊(duì)列,使得每個(gè)擁有AutoRenderingSurface屬性的window有屬于自己的隊(duì)列(默認(rèn)只有FrameWindow才有)
而在drawself中執(zhí)行的則是先通過(guò)looknfeel,把需要渲染的信息丟到每個(gè)部件自己的GeometryBuffer里,然后把GeometryBuffer丟到RenderingSurface的隊(duì)列中(一般為
FrameWindow的GeometryBuffer隊(duì)列,每個(gè)面板就有自己的渲染隊(duì)列了)
要知道以往都是只有一個(gè)隊(duì)列的,要渲染啥直接往里塞。 。 。
這樣一改就不必每個(gè)小部件有更改都要全部重新清空渲染了
再往后就是把每個(gè)窗口隊(duì)列里的GeometryBuffer渲染到各自的RenderingSurface表面上,這里要注意的是并不是渲染到屏幕上而是表面上,cegui在這里使用了渲染到紋理,GL
用的是fbo實(shí)現(xiàn)的。
注意RenderingSurface只有兩個(gè)來(lái)源,一是通過(guò)設(shè)置AutoRenderingSurface屬性,另一個(gè)就是RenderingRoot了,RenderingRoot只有一個(gè),在render中,通過(guò)第一個(gè)來(lái)源的使
用的是fbo的渲染,而第二個(gè)來(lái)源則直接渲染到屏幕了。
所有的這些執(zhí)行完后就可以渲染到屏幕了,通過(guò)RenderingRoot執(zhí)行,注意這里的RenderingRoot中的RenderTarget和之前的不一樣,這里用的是OpenGLViewportTarget而不是
OpenGLFBOTextureTarget。