修改opengl使用的纹理是否安全?

时间:2017-06-28 07:21:56

标签: opengl cuda

我有一个使用Ogre引擎进行渲染的应用程序(OpenGL)。有一个绑定到管道的纹理。还有一个修改该纹理的CUDA调用。基本上它看起来像这样:

cudaGraphicsMapResources(tex);

// call cuda kernel that writes to te texture

cudaGraphicsUnmapResources(tex);

这有多安全? CUDA有可能更新OpenGL当前使用的纹理吗?我不了解OpenGL但知道其他API。在DirextX 12或vulkan中,我需要为这种工作设置障碍或其他同步机制。但另一方面,DirectX 11允许安全地更新映射资源,因为它在API内部具有同步。

2 个答案:

答案 0 :(得分:1)

这样做应该是安全的,主要是因为OpenGL在GPU中存储了所有相关的缓冲区和ID。但请注意,您可能无法更新绑定到GPU的纹理。

答案 1 :(得分:1)

只要纹理映射到CUDA资源,任何在OpenGL端读取或写入的尝试都将导致未定义的结果。它在CUDA docs中明确说明。