阅读了this文章后,我想尝试做同样的事情,但为了加快渲染部分,我希望它能在GPU上执行,毋庸置疑,为什么三角形或任何其他几何对象应该在GPU上而不是CPU上呈现。以下是这个过程的一个很好的图像:
任务:
- 渲染“顶点集合”
- 逐像素估计渲染的“顶点集合”与蒙娜丽莎图像(蒙娜丽莎位于GPU中的纹理或PBO,没有太大区别)之间的差异
问题:
使用OpenGL FBO(Frame Buffer Object)扩展的OpenCL或Cuda。
在这种情况下,根据我们的任务:
- 渲染“顶点集合”(由OpenGL处理)
- 逐像素估计渲染的“顶点集合”与蒙娜丽莎图像之间的差异(由OpenCL或Cuda处理)
因此,在这种情况下,我被迫从FBO复制到PBO(Pixel Buffer Object),以使渲染的“顶点集合”可用于OpenCL/Cuda。我知道设备到设备内存复制有多快,但是考虑到我需要做成千上万次这样的复制,不这样做是有道理的...
这个问题留下了三个选择:
- 以OpenGL渲染到PBO(不知道如何实现,也可能无法实现)
- 使用OpenGL完全渲染图像并估算图像之间的差异(不知道如何实现,也许可以使用着色器,唯一的问题是我从未编写过着色器,这可能需要数月时间...)
- 使用OpenCL/Cuda完全渲染图像并估算图像之间的差异(我知道如何实现,但要实现一个稳定且优化程度较高的OpenCL或Cuda版本的渲染器可能需要数月时间)
问题
有人能帮我编写上述过程的着色器,或者指出在不从FBO复制的情况下将蒙娜丽莎渲染到PBO的方法吗?