如何取消阻止OpenGL调用

如何取消阻止OpenGL调用,opengl,glsl,gpgpu,Opengl,Glsl,Gpgpu,我正在研究使用OpenGL+GLSL进行GPGPU编程。一个问题是,如果你有一个需要很长时间才能完成的着色器,似乎不可能取消它 设置完所有内容后,我发出最后一个glReadPixels调用which blocks,直到所有像素都被渲染到帧缓冲区。根据着色器的不同,这可能需要很长时间,甚至几秒钟。有没有办法取消(来自另一个线程的)调用,甚至查询进度?如果在着色器中设置无限循环会发生什么情况?可以使用不阻塞的PixelBufferObject而不是glReadPixels。glReadPixels将

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


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

可以使用不阻塞的PixelBufferObject而不是glReadPixels。glReadPixels将(在主线程中)等待结果,但PBO将继续。。。在代码后面的某个地方,您可以检查PBO中的数据是否可用


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

您可以使用不阻塞的PixelBufferObject,而不是glReadPixels。glReadPixels将(在主线程中)等待结果,但PBO将继续。。。在代码后面的某个地方,您可以检查PBO中的数据是否可用

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

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

我想你会被视频驱动器撞坏的

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


我想你会遇到视频驱动程序崩溃。

+1用于PBO。对我来说,它也被称为“异步传输”,它将纹理下载提高了80%。看起来PBO与围栏相结合会达到这个目的。。。但是我需要这个来在OpenGLES2.0上工作,也可以在iPad上工作(这也是我不使用OpenCL的原因)。但无论如何,这是一个很好的答案,谢谢+1为PBO。对我来说,它也被称为“异步传输”,它将纹理下载提高了80%。看起来PBO与围栏的结合将有助于技巧。。。但是我需要这个来在OpenGLES2.0上工作,也可以在iPad上工作(这也是我不使用OpenCL的原因)。但无论如何,这是一个很好的答案,谢谢!被否决是因为“我认为”没有任何意义。我刚刚在旧的ATI卡上试用过,如果着色器在每像素的基础上运行太长,驱动程序将终止着色器,而不会报告任何错误。这可能是特定于供应商的。我又做了一些试验,驱动程序在Windows Vista上两秒钟后确实崩溃了,因为Windows强制它崩溃。我仍然保留否决票,因为“我认为”:你没有很好地解释为什么会发生崩溃。这个案例没有在文档中描述。我有过在使用非常慢的着色器时崩溃的经验(我认为,这与,)。如果我的着色器从纹理中读取了很多数据(大约1000次读取操作),我也会崩溃。我想在“我想”的问题下写一条评论,但我不能写评论。这取决于操作系统,而不是司机,这个答案的编辑版本(没有“我想”)应该被接受。否决,因为“我想”没有任何意义。我刚刚在旧的ATI卡上试用过,如果着色器在每像素的基础上运行太长,驱动程序将终止着色器,而不会报告任何错误。这可能是特定于供应商的。我又做了一些试验,驱动程序在Windows Vista上两秒钟后确实崩溃了,因为Windows强制它崩溃。我仍然保留否决票,因为“我认为”:你没有很好地解释为什么会发生崩溃。这个案例没有在文档中描述。我有过在使用非常慢的着色器时崩溃的经验(我认为,这与,)。如果我的着色器从纹理中读取了很多数据(大约1000次读取操作),我也会崩溃。我想在关于“我想”的问题下写一条评论,但我不能写评论。这取决于操作系统而不是驱动程序,应该接受这个答案的编辑版本(没有“我想”),正确的答案是阻止OpenGL阻止调用是不可能的(这实际上是一个问题,因为有些人有可以进行长时间计算的着色器)。基本上,操作系统给OpenGL“一些时间”。如果openGL没有及时结束工作,操作系统就会终止进程。但是你已经接受了一个答案,祝你好运:DSee我的回答,我基本上已经放弃了。:-)正确的答案是阻止openGL阻止调用是不可能的(这实际上是一个问题,因为有些人有可以进行长时间计算的着色器)。基本上,操作系统给OpenGL“一些时间”。如果openGL没有及时结束工作,操作系统就会终止进程。但是你已经接受了一个答案,祝你好运:DSee我的回答,我基本上已经放弃了。:-)