Ogre學習筆記(9):API 抽象層


       OGRE通過一個抽象層,實現了API無關性。現在有RenderSystem_Direct3D9RenderSystem_GL兩個實現。下面主要通過考察RenderSystem_Direct3D9來分析一下API抽象層及其實現。

       API抽象層有兩個核心的類:RenderSystemHardwareBufferManager,另外還有一系列的HardwareVertexBufferHardwareIndexBufferHardwareBuffer的派生類,RenderWindowGpuProgram類等等。

 

       RenderSystem是一個3D API的基本功能的抽象,他有兩類接口函數,以“_”開頭的函數都是屬於low level接口。RenderSystem提供的主要接口有:

1.       初始化:initialise(),reinitialise
關閉:shutdown()

2.       Draw_render

3.       Transform_setWorldMatrix,  _setViewMatrix,  _setProjectionMatrix

4.       LightsetAmbientLight,  setLightingEnabled,  _useLights

5.       State_setTexture, _setTextureCoordSet, _setTextureCoordSet, _setSceneBlending, _setCullingMode, _setDepthBufferParams, _setFog

6.       GPU ProgrambindGpuProgram, bindGpuProgramParameters, unbindGpuProgram

7.       ListeneraddListener, removeListener

另外還有RenderTaret, RenderWindow, ClipPlane等等相關的接口。

       RenderSystem的實例創建是在“Root::restoreConfig()-->Root::getRenderSystemByName()-->Root::getAvailableRenderers()”,通過字符串找到指定的RenderSystem實例。所有可用的RenderSystem實例存放在Root:: mRenderers數組中,由“Root::loadPlugin()-->dllStartPlugin”負責創建並通知Root對象。

 

       HardwareBufferManager3D API抽象層的另外一個重要的類。OGREHardwareBufferManagerRenderSystem分開是一個很好的設計。它主要負責抽象VertexBufferIndexBuffer的創建、銷燬等工作。

       D3D9HardwareBufferManager的實例是在D3D9RenderSystem::createRenderWindow()函數中創建的(只有創建Primary Window時才創建)。
       HardwareBufferManager
提供了releaseDefaultPoolResources()recreateDefaultPoolResources()接口,用來處理Device Lost,這個兩個操作都是施加於成員數據VertexBufferList mVertexBuffersIndexBufferList mIndexBuffers之上的。在recreate之後VBIB中的數據是如何恢復的呢?

 

       D3D9TextureManagerTextureManager派生,用來創建D3D9Texture對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章