c++ - 从 OpenGL 着色器获取数据?

标签 c++ objective-c opengl image-processing

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

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

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

最佳答案

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

  • 创建并绑定(bind)帧缓冲区对象
  • 创建渲染缓冲区对象并将其附加到帧缓冲区对象
  • 渲染您的场景。结果将最终出现在绑定(bind)的帧缓冲区对象中,而不是屏幕上。
  • 使用 glReadPixels 从帧缓冲区对象中提取数据。

请注意,与大多数将数据从 GPU 内存提取回主内存的方法一样,glReadPixels 速度很慢,并且可能不适合实时应用程序。但如果您没有专门用于此目的的功能(例如计算着色器),或者愿意使用像素缓冲区对象异步执行此操作,那么这是您能做的最好的事情。

您可以阅读有关帧缓冲区的更多信息 here .

关于c++ - 从 OpenGL 着色器获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594307/

相关文章:

iphone - 如何判断收到了哪个本地通知? Objective-C

c++ - SDL_TTF 绘制垃圾

c++ - 从代码中添加作者、版本等信息

c++ - 如何重载具有多个参数的运算符,如 a + b + c?

objective-c - CFNumber 到 int 还是 NSNumber?

ios - 如何在 UISegmentedcontrol 中更改选中和未选中段的颜色?

c++ - 缩小png字体

任何人都可以使用 opengl 在 c 中给我一个简短的代码示例,其中单击两个不同的方 block 会改变它们的颜色?

c++ - 链接器错误 - clang++

c++ - 继承一个带有内部类的模板类,并在继承类中访问内部类