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