私は CUDA にはかなり慣れていませんが、カーネルによって生成されたものを OpenGL を使用して画面に表示することができました。私はいくつかのアプローチを試しました:
- PBO と OpenGL テクスチャの使用 (古いスタイル);
- OpenGL テクスチャを CUDA サーフェスとして使用し、クワッドでレンダリングする (新しいスタイル)。
- renderbuffer を CUDA サーフェスとして使用し、glBlitFramebuffer を使用してレンダリングします。
それらはすべて機能しましたが、#2 を実装しているときに、誤ってヒントを cudaGraphicsRegisterFlagsWriteDiscard として設定しました。すべてのデータが CUDA によって生成されるため、これは正しいオプションだと思いました。しかし、後になって、OpenGL テクスチャに書き込むには CUDA サーフェスが必要であり、サーフェスを使用する場合は LoadStore フラグを使用するように要求されることに気付きました。
基本的に私の質問は次のとおりです。CUDA で OpenGL テクスチャに書き込むには CUDA サーフェスが絶対に必要なので、cudaGraphicsGLRegisterImage の cudaGraphicsRegisterFlagsWriteDiscard の使用例は何ですか?