opengl - 将蒙娜丽莎渲染为 PBO

标签 opengl cuda opencl gpgpu

阅读后this文章我想尝试做同样的事情,但为了加速我希望在 GPU 上执行的渲染部分,不用说为什么三角形或任何其他几何对象应该在 GPU 而不是 CPU 上渲染。
这是该过程的一张很好的图片:
Mona Lisa
任务:

  • 渲染“一组顶点”
  • 估计差异像素
    渲染的“顶点集”和蒙娜丽莎图像之间的像素(蒙娜丽莎位于 GPU 上的纹理或 PBO 没有太大区别)

  • 问题:
    将 OpenCL 或 Cuda 与 OpenGL FBO(帧缓冲对象)扩展一起使用时。
    在这种情况下,根据我们的任务
  • 渲染“一组顶点”( 由 OpenGL 处理 )
  • 估计差异像素
    渲染的“顶点集”和蒙娜丽莎图像之间的像素( 由 OpenCL 或 Cuda 处理 )

  • 所以在这种情况下,我被迫从 FBO 复制到 PBO(像素缓冲区对象)以获得可用于 OpenCL/Cuda 的渲染“顶点集”。我知道设备到设备内存复制的速度有多快,但根据我需要进行数千次这些复制的事实,不这样做是有道理的......
    这个问题留下三个选择:
  • 使用 OpenGL 渲染到 PBO(不知何故,我不知道如何,这也可能是不可能的)
  • 渲染图像并完全使用 OpenGL 估计图像之间的差异(不知何故,我不知道如何,也许通过使用着色器,唯一的问题是我一生中从未编写过着色器,这可能需要数月的时间我...)
  • 完全使用 OpenCL/Cuda 渲染图像并估计图像之间的差异(我知道如何做到这一点,但在 OpenCL 或 Cuda 中实现的渲染器的稳定和或多或少优化版本需要几个月的时间)

  • 问题
    任何人都可以帮助我为上述过程编写着色器,或者指出在没有 FBO 副本的情况下将蒙娜丽莎渲染到 PBO 的方法...

    最佳答案

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

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

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

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

    关于opengl - 将蒙娜丽莎渲染为 PBO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6730980/

    相关文章:

    c - 使用 uint2 和 CUDA 的问题

    opengl - 将 OpenGL 渲染缓冲区绘制到屏幕

    CUDA 共享内存广播和 __syncthreads 行为

    cuda - 优雅地崩溃内核

    OpenCL 和 Tesla M1060

    Fedora 21 中的 OpenCV 编译错误

    c++ - OpenGL 渲染到帧缓冲区导致白色矩形纹理

    c++ - glTexImage2D 'target is not valid'

    java - 重复场景树 (Java3d/OpenGL)

    python - 用于 OpenGL 第一人称射击游戏 View 的顶点/片段着色器?