如何将深度缓冲从OGRE传递到CUDA?

时间:2013-06-17 04:06:28

标签: opengl cuda ogre depth-buffer

我正在使用OGRE来渲染一些对象。在每一帧,我都希望将生成的深度缓冲区传递给CUDA,以便在其上运行一些内核并计算结果。

我怎样才能做到这一点?如何访问OGRE中的深度缓冲区?如何将其传递给CUDA进行处理?我不需要写入CUDA内核中的深度缓冲区,它可以是只读的。

1 个答案:

答案 0 :(得分:2)

可以将缓冲区从Ogre传递到CUDA:

LPDIRECT3DDEVICE9 mDevice;
renderWindow->getCustomAttribute("D3DDEVICE", (void*) &mDevice);

Ogre::HardwareVertexBufferSharedPtr vbuf =
    renderOp.vertexData->vertexBufferBinding->getBuffer(0); // or where your vertexData is stored.

Direct3DVertexBuffer9*  mD3D9VertexBuffer_1 =
static_cast<Ogre::D3D9HardwareVertexBuffer*>(vbuf.get())->getD3D9VertexBuffer(); 

现在你可以做一个cudaMemcopy()。更多信息:http://www.ogre3d.org/forums/viewtopic.php?f=5&t=47003&sid=a0b22c741f015e2fdf0a5862d12d2020&start=25

我有这个工作的顶点缓冲区。我不确定这是否适用于DepthBuffer,但至少你可以尝试:IDirect3DSurface9* Ogre::D3D9Device::getDepthBuffer ( D3D9RenderWindow * renderWindow )。但是,如果这有效,我找不到信息(参见http://www.ogre3d.org/docs/api/html/classOgre_1_1D3D9Device.html#a8e195a845ed22e0215d42abbc75d744e