我用 openGL 创建了一个图像并用 glReadPixels() 读取它。现在,我想分析这些数据。我想并行化在每个像素上运行的循环并通过 CUDA 检查其颜色。问题是我需要将数据从 GPU 传递到 CPU,然后再传递到 GPU。
有一种方法可以在不通过 CPU 的情况下将数据从 glReadPixles() 传递到 CUDA?
纹理记忆可以帮助我吗?
我用 openGL 创建了一个图像并用 glReadPixels() 读取它。现在,我想分析这些数据。我想并行化在每个像素上运行的循环并通过 CUDA 检查其颜色。问题是我需要将数据从 GPU 传递到 CPU,然后再传递到 GPU。
有一种方法可以在不通过 CPU 的情况下将数据从 glReadPixles() 传递到 CUDA?
纹理记忆可以帮助我吗?
您需要使用CUDA-OpenGL 互操作 API。
图形和成像部分中有许多可能感兴趣的 CUDA 示例代码。
我建议从gaussian blur sample开始,因为我认为其中的处理流程与您所描述的很接近(在显示之前修改每个像素)。
您不使用glReadPixels
,因为这确实会将数据带回 CPU。相反,您使用 CUDA 注册一个 openGL 对象,以便它可以由 CUDA 操作,然后在显示之前取消注册它。