如何使用OpenGL将OpenCL计算出的像素绘制到屏幕上?

14

我希望使用OpenCL进行计算像素艺术,并直接在显示器上显示,无需进行CPU往返。我可以利用OpenCL与OpenGL的互操作性,将数据写入GPU的纹理库中,并使用OpenGL显示纹理。但是,我想知道最佳方法是什么,因为我不需要任何3D内容,只有2D像素艺术。

1个回答

15
最好的方法是使用OpenCL/OpenGL互操作(interop),如果您的OpenCL实现支持。这将允许OpenCL访问某些OpenGL对象(缓冲对象和纹理/渲染缓冲区)。您将无法直接访问默认的OpenGL帧缓冲区(即显示器),但您将能够访问绑定到帧缓冲对象的图像。从那里,您可以在OpenGL中执行帧缓冲区复制到默认帧缓冲区的操作。没有任何东西会触及CPU内存。
您需要查阅有关CL/GL互操作的具体信息,以了解详细信息。基本思路是在OpenGL中创建一个渲染缓冲区(它被绑定到FBO),然后将该渲染缓冲区交给OpenCL,并将计算结果保存在该渲染缓冲区中。完成后,通过glBlitFramebuffer将数据从渲染缓冲区复制到默认帧缓冲区,然后交换缓冲区以显示它。

1
不错的方法。我知道这个方法,但是我在实现CL&GL互操作方面遇到了一些问题。你能否请看一下我的问题:http://stackoverflow.com/questions/8789662/interoperability-texture-access-block? - itun
我已经编写了完整的OpenCL / OpenGL / VAAPI互操作演示,可以实现这一点:https://github.com/kallaballa/GCV - kallaballa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接