Opengl 如何将深度缓冲区从食人魔传递到CUDA?

Opengl 如何将深度缓冲区从食人魔传递到CUDA?,opengl,cuda,ogre,depth-buffer,Opengl,Cuda,Ogre,Depth Buffer,我正在使用渲染一些对象。在每一帧中,我都希望将生成的深度缓冲区传递给CUDA,以便在其上运行一些内核并计算结果 我怎样才能做到这一点?如何在OGRE中访问深度缓冲区?如何将其传递给CUDA进行处理?我不需要写入CUDA内核中的深度缓冲区,它可以是只读的。将缓冲区从Ogre传递到CUDA是可能的,如下所示: LPDIRECT3DDEVICE9 mDevice; renderWindow->getCustomAttribute("D3DDEVICE", (void*) &mDevice

我正在使用渲染一些对象。在每一帧中,我都希望将生成的深度缓冲区传递给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(); 
LPDIRECT3DDEVICE9 mDevice;
renderWindow->getCustomAttribute(“D3DDEVICE”,(void*)&mDevice);
Ogre::HardwareVertexBufferSharedPtr vbuf=
renderOp.vertexData->vertexBufferBinding->getBuffer(0);//或者存储顶点数据的位置。
Direct3DVertexBuffer9*mD3D9VertexBuffer_1=
static_cast(vbuf.get())->getD3D9VertexBuffer();
现在您可以执行cudaMemcopy()。更多信息:


我让它为顶点缓冲区工作。我不确定这是否适用于DepthBuffer,但至少您可以尝试:
IDirect3DSurface9*Ogre::D3D9Device::getDepthBuffer(D3D9RenderWindow*renderWindow)
。但是,我找不到这是否有效的信息(请参阅)

我认为您无法直接访问深度缓冲区。但是您可以将其渲染到纹理,并在CUDA内核中访问该纹理。还有,为什么要在游戏开发中交叉发布这个呢?@Talonmes:希望gamedev的人知道食人魔:)科尔金:谢谢。我在Linux上,所以OpenGL:)我现在看到你的标签了。我没有这方面的经验。然而,也许你可以结合和。我不能提供支持,但也许值得一看。@Corjin:非常感谢。您已经为我提供了足够的线索来尝试OpenGL解决方案:)抱歉,找不到使用OpenGL执行此操作的方法:(