使用openCL每个像素修改openGL纹理的最快方法

时间:2013-12-29 00:43:46

标签: opengl textures opencl share

使用OpenGL 4.4和OpenCL 2.0,假设我只想修改每帧纹理的特定像素。

实现这一目标的最佳方法是什么? 我应该分享哪个对象? 我能只修改有限数量的像素吗? 我只想要GPU操作。

1 个答案:

答案 0 :(得分:1)

首先,还没有OpenCL 2.0驱动程序;该规范最近才最终确定,实施可能要到2014年才会发生。

同样,许多OpenGL实现尚未达到4.4。

但是,您仍然可以使用OpenCL 1.2(或1.1,因为NVIDIA在OpenCL支持中支持业界)以及当前的OpenGL实现。

寻找OpenCL / OpenGL互操作示例,但基本上是:

  1. 从OpenGL上下文创建OpenCL上下文
  2. 从OpenGL纹理创建OpenCL图像
  3. 将OpenGL渲染到纹理中后,获取OpenCL的图像,运行仅更新要更新的特定像素的OpenCL内核,然后将其发布回OpenGL
  4. 将纹理绘制到屏幕
  5. OpenCL内核通常是2D并且对每个像素进行寻​​址,但是您可以运行一维内核,其中每个工作项基于某种算法更新单个像素。只要确保不要从多个工作项中写入相同的像素,否则您将遇到竞争条件。