我的计算机不支持 GPU 上的 OpenCL 或 OpenGL 计算着色器,因此我想知道从顶点或片段着色器获取数据是否是一个直接的过程?
我的目标是将 2 个纹理传递给着色器,并让着色器计算一个纹理存在于另一个纹理中的位置。存在像素匹配的地方。我需要从着色器中检索可能匹配的位置。
这合理吗?如果是这样,我该怎么办?我有基本的 OpenGL 知识,我已经建立了一个用颜色绘制多边形的程序。我真的只需要一种从着色器获取位置值的方法。
最佳答案
您可以渲染到内存而不是屏幕,然后从中获取数据。
- 创建并绑定(bind)帧缓冲区对象
- 创建渲染缓冲区对象并将其附加到帧缓冲区对象
- 渲染您的场景。结果将最终出现在绑定(bind)的帧缓冲区对象中,而不是屏幕上。
- 使用
glReadPixels
从帧缓冲区对象中提取数据。
请注意,与大多数将数据从 GPU 内存提取回主内存的方法一样,glReadPixels
速度很慢,并且可能不适合实时应用程序。但如果您没有专门用于此目的的功能(例如计算着色器),或者愿意使用像素缓冲区对象异步执行此操作,那么这是您能做的最好的事情。
您可以阅读有关帧缓冲区的更多信息 here .
关于c++ - 从 OpenGL 着色器获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594307/