一部のオブジェクトのレンダリングに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を参照) 。