回读存储在纹理中的数据

时间:2014-08-07 14:41:26

标签: opengl textures

我有一个从计算点位置的片段着色器更新的纹理。

阅读它的好方法是什么,以便可以将其绘制为原语?

1 个答案:

答案 0 :(得分:1)

如果你想使用纹理中的数据进行绘制,那么回读主机内存是一种浪费而且速度很慢(但是为了参考,你可以使用glGetTexImageglReadPixels)。

  • 相反,您可以在不提供顶点位置的情况下绘制基元,并在顶点着色器中将其从纹理中读取(绑定为采样器并使用texelFetch)。

    texel fetch的坐标可以来自每个顶点属性(就像常规纹理坐标一样),或者您可以使用gl_VertexID隐式计算它们。

  • 正如@ColonelThirtyTwo所说,你也可以使用变换反馈。不使用纹理并在片段着色器中进行计算,而是将其替换为顶点着色器中的计算。这里通常内插到片段着色器的变量变量被打包并保存在缓冲区中,仍然在GPU上。