如何取消阻止OpenGL调用

时间:2012-12-28 14:54:45

标签: opengl glsl gpgpu

我正在研究使用OpenGL + GLSL进行GPGPU编程。一个问题是,如果你有一个需要很长时间才能完成的着色器,似乎无法取消它。

设置完所有内容后,我发出最终glReadPixels调用,该调用将阻塞,直到所有像素都渲染到帧缓冲区。根据着色器,这可能需要很长时间,甚至几秒钟。有没有办法取消呼叫(从另一个线程)甚至查询进度?如果在着色器中设置无限循环会发生什么?

2 个答案:

答案 0 :(得分:3)

而不是glReadPixels你可以使用没有阻塞的PixelBufferObjects。 glReadPixels将等待(在您的主线程中)获得结果,但PBO将继续......在代码的后面某处,您可以检查PBO中的数据是否可用。

http://www.songho.ca/opengl/gl_pbo.html

http://www.opengl.org/wiki/Pixel_Buffer_Object

如果您需要更高级的计算,那么您可能希望使用OpenCL,这将为您提供更大的灵活性。

答案 1 :(得分:0)

  

如果在着色器中设置无限循环会发生什么?

我认为你的视频驱动程序会崩溃。