从OpenGL shader获取数据

Get data back from OpenGL shader?

本文关键字:数据 获取 shader OpenGL      更新时间:2023-10-16

我的计算机不支持GPU上的OpenCL或OpenGL计算着色器,所以我想知道从顶点或片段着色器获取数据是否会是一个直接的过程?

我的目标是将2个纹理传递给着色器,并让着色器计算机确定一个纹理存在于另一个纹理中的位置。有像素匹配的地方。我需要从着色器中检索可能匹配的位置。

这合理吗?如果有,我该怎么做呢?我有基本的OpenGL知识,我已经建立了一个程序,绘制多边形与颜色。我真的需要一种方法来获取位置值从着色器。

你可以渲染到内存而不是屏幕,然后从中获取数据。

  • 创建并绑定Framebuffer对象
  • 创建一个Renderbuffer对象并将其附加到Framebuffer对象
  • 渲染你的场景。结果将以绑定的Framebuffer对象结束,而不是在屏幕上。
  • 使用glReadPixels从Framebuffer对象中提取数据。

请注意,glReadPixels,像大多数从GPU内存提取数据回主存的方法一样,是缓慢的,可能不适合实时应用程序。但如果你没有这样的功能,比如计算着色器,或者你愿意用像素缓冲对象异步地做,这是你能做的最好的。