我正在使用OGRE来渲染一些对象。在每一帧,我想将生成的深度缓冲区传递给 CUDA,以便在其上运行一些内核并计算结果。
我怎样才能做到这一点?如何访问 OGRE 中的深度缓冲区?如何将其传递给 CUDA 进行处理?我不需要写入 CUDA 内核中的深度缓冲区,它可以是只读的。
我正在使用OGRE来渲染一些对象。在每一帧,我想将生成的深度缓冲区传递给 CUDA,以便在其上运行一些内核并计算结果。
我怎样才能做到这一点?如何访问 OGRE 中的深度缓冲区?如何将其传递给 CUDA 进行处理?我不需要写入 CUDA 内核中的深度缓冲区,它可以是只读的。
像这样将缓冲区从 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)