我正在Linux上用OpenCL做一个项目,我想把OpenCL生成的图像绘制到屏幕上。
为了使它通用和平台无关,我尝试使用GLFW和OpenGL的纹理来绘制这样的图像。如果我能告诉OpenGL使用GPU上的相同内存块来绘制图像/纹理,那就太好了,但由于Linux不支持与Intel的互操作性,我还有什么其他选择呢?
我可以每次都用OpenCL图像的内容重写OpenGL纹理,但这太慢了,也没有必要。
有没有替代的方法?也许是直接用OpenCL把图像绘制到窗口的方法?或者是另一个通用的窗口管理库,允许我做我想做的事情?
1条答案
按热度按时间u3r8eeie1#
如果你自己实现了Bresenham光栅化或者光线跟踪,你可以直接用OpenCL渲染。一个图像毕竟只是一个整数数组。我在YouTube上有一个关于这个的录音,我的源代码在GitHub上。
渲染后的图像交给Windows上的Win32 API或Linux上的X11绘制到屏幕上,即使没有屏幕,也可以在控制台中以ASCII模式绘制图像或导出为png/bmp/qoi图像文件,这是普遍兼容的。这意味着代码可以在任何库PC上编译和运行,而不需要sudo权限或任何先前安装的g++和图形驱动程序。它可以在任何硬件上工作,甚至像A100/MI250这样缺乏渲染功能的数据中心GPU。
实现起来很费劲,但没有好的替代方案。像Qt这样的库,虽然它们更简单,而且可执行文件可以跨平台运行,但它们有外部依赖项,因此在没有预先安装的情况下无法编译,这可能需要sudo权限。