Ogre:Hardwarebuffer

  1.      
  2. Ogre中的硬件缓存是指在显卡上的存储,这和在内存上的存储一样是可以访问的。有三种硬件缓存:HardwareVertexBuffer(顶点缓存,存储顶点的各种数据)、HardwareIndexBuffer(索引缓存,存储一个mesh的面片的顶点索引),HardwarePixelBuffer(纹理缓存,存储某个纹理贴图的数据)。这些数据在程序运行时都在显卡的存储上,然而你可以去读和写这些数据,来操控程序中物体的形状、纹理等。这个用处是非常大的。在Ogre中与访问这些硬件缓存有关的类及他们相互间的关系如下图:
  1. hardwarebuffer 
  2. 根据这个图进行解释
  3. 1、最上面的hardwarevertexbuffer
  4. 读写:如果mesh使用的所有子mesh共享buffer的形式,则用mesh的sharedvertexdata,否则用submesh的vertexdata来得到vertexdata结构,vertexdata封装了对该mesh的顶点缓存数据的访问方式,但是却不直接包含这些顶点缓存数据。vertexdata中的vettexbufferbinding可以知道当前的vertexdata对应了确切的硬件上的哪块buffer,可以通过vettexbufferbinding的getBuffer确切的得到该顶点缓存,而vertexdata中的vertexdeclaration则是一个对他对应的buffer进行各种访问的接口,里面有访问的格式等。如果要开始操纵这个buffer,需要将getbuffer得到的hardwarevertexbuffer调用lock,然后将这片缓存上锁,这个lock返回了一个void指针,指向的就是缓存数据。拿着这个指针就可以读取改写等
  5. 创建:使用hardwarebuffermanager的create来创建,创建后利用hardwarevertexbuffer的write写入数据
  6. 2.中间的hardwareindexbuffer
  7. 读写:直接使用submesh的indexdata来得到一个indexdata结构,再调用它的hardwareindexbuffer的来得到这个顶点缓存,童年顶点缓存一样再调用lock来进行读写操作

创建:同顶点缓存

3最下面的hardwarepixelbuffer

读写:从texture中可以直接得到这个hardwarepixelbuffer,然后对它lock后就可以得到一个pixelbox的数据,pixebox封装了所有纹理数据及其各种属性信息

创建:texture是由texturemanager创建的

下面是一些具体的使用硬件缓存的例子

读取顶点和索引缓存

    Ogre::MeshPtr meshPtr=mainEntity->getMesh();
   //假设这里使用的是share的形式
    Ogre::VertexData* vertex_data=meshPtr->sharedVertexData;

   //得到位置数据的信息
    const Ogre::VertexElement* posElem =

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值