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对象。

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