opengl - cudaGraphicsUnregisterResource 中出现崩溃错误

标签 opengl cuda

我使用以下代码来清理 CUDA 对一对 pbo 的使用,准备以不同的大小重新创建它们:

glFinish();
CUDA_SAFE_CALL(cudaGraphicsUnregisterResource(m_cuda_pbo_resource));
CUDA_SAFE_CALL(cudaGraphicsUnregisterResource(m_cuda_pbo_depth_resource));
glDeleteBuffersARB(1, &m_pbo);
glDeleteBuffersARB(1, &m_pbo_depth);

在窗口调整大小操作期间,在以新大小重新绘制窗口时,在绘制操作中调用此代码。有时,取消注册 m_cuda_pbo_resource 的调用会失败并且程序终止。当用户尽可能快地连续调整窗口大小时,发生这种情况的可能性似乎更高。因为它不会一直发生,所以可能是某种竞争条件,但我已经没有办法尝试调试它了。

最佳答案

您可以在内核运行时释放缓冲区。尝试粘贴

   cudaThreadSynchronize();

就在该代码块之前。

关于opengl - cudaGraphicsUnregisterResource 中出现崩溃错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6333893/

相关文章:

c++ - CUDA C++ : Expected an expression in kernel. cu 文件

opengl - 渲染到窗口帧缓冲区和 FBO 以保存全尺寸纹理图像

c++ - OpenGL 中的 mipmap 颜色人工制品

c++ - 如何使用 glm::lookAt() 旋转对象?

linux - 关于 Linux 上 CUDA C 的程序 "Hello world"

cuda - 一个小小的 CUDA 难题

cuda - 通过CUDA Thrust查找key的出现次数和key第一次出现的位置

c++ - openGL 3 问题 : undefined reference to _glapi_tls_Dispatch

c++ - 尝试在方法中包装 glGenVertexArrays 调用时出现段错误

cuda - 为什么我的 __device__、__constant__、__shared__ 不支持动态初始化?