将蒙娜丽莎呈现给PBO

时间:2011-07-18 09:33:51

标签: opengl cuda opencl gpgpu

在阅读this文章之后,我想尝试做同样的事情,但为了加速渲染部分,我想在GPU上执行,不用说为什么三角形或任何其他几何对象应该在GPU而不是CPU上呈现。

这是一个很好的过程形象:

Mona Lisa

任务:

  1. 渲染'顶点集'
  2. 估算差异像素 渲染的'顶点集'和蒙娜丽莎图像之间的像素(蒙娜丽莎位于GPU上的纹理或PBO没有太大区别)
  3. 问题:

    使用OpenCL或Cuda与OpenGL FBO(帧缓冲区对象)扩展时。

    在这种情况下根据我们的任务

    1. 渲染'顶点集'(由OpenGL处理​​
    2. 估算差异像素 渲染的“顶点集”和蒙娜丽莎图像之间的像素(由OpenCL或Cuda处理
    3. 因此,在这种情况下,我不得不从FBO到PBO(像素缓冲区对象)进行复制,以获得OpenCL / Cuda的渲染“顶点集”。我知道设备到设备内存的复制速度有多快但是根据我需要做数千个这样的副本的事实,不这样做是有道理的......

      这个问题有三个选择:

      1. 使用OpenGL渲染到PBO(以某种方式,我不知道如何,也可能无法这样做
      2. 使用OpenGL渲染图像并估计图像之间的差异(不知何故,我不知道如何使用着色器,唯一的问题是我从来没有在我的生活中写过一个着色器我可能需要几个月的工作......
      3. 渲染图像并使用OpenCL / Cuda完全估计图像之间的差异(我知道如何做到这一点,但是在OpenCL或Cuda中实现渲染器的稳定性和或多或少优化版本需要几个月的时间
      4. 问题

        任何人都可以帮我编写一个着色器用于上述过程,或者可能指出将Mona Lisa渲染到PBO而没有来自FBO的副本的方式...

1 个答案:

答案 0 :(得分:1)

我的直觉是Shader方法也会遇到相同的IO问题,只要GPU支持PS 4.0或更高版本,你当然可以比较着色器中的纹理;但你首先必须将源纹理(蒙娜丽莎)放到设备上。

编辑:一直在挖掘这个论坛帖子可能会提供一些见解:

http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=221384&page=1

海报Komat在第2页提供了着色器的示例。