是否有可能将数据存储在opengl es 2.0中的纹理中

时间:2012-12-10 04:37:13

标签: android opengl-es-2.0 glsl

我现在正在编写一个程序,在GL着色语言的帮助下使用GPU生成纹理。但是,我想知道是否有可能获取存储在纹理中的数据并将其写入数组中?

1 个答案:

答案 0 :(得分:1)

如果你有glGetTexImage*(),这不是什么大问题。

如果glGetTexImage *()不可用,则必须将纹理四边形渲染到渲染缓冲区,渲染缓冲区附加到FBO(如果支持),或渲染到后缓冲区,并使用glReadPixels()从任一个读取它渲染目标。如果渲染目标的大小不足,则必须单独渲染和检索多个图块。

在实施任何一种方法时,请注意其他状态,这些状态决定实际写入像素的方式和位置:

  • GL_PACK_ALIGNMENT(图像行对齐; 1,2,4或8个字节)需要为请求的图像大小分配适当的内存。例如,24位DIB(.bmp)使用4字节的行对齐。每个像素有3个字节,如果(image.width * 3) % 4 != 0,最后需要填充。 额外填充字节的总量为:

    readSize.y * ((alignment - readSize.x % alignment) % alignment)

  • GL_PIXEL_PACK_BUFFER,像素传输的目标缓冲区绑定(在您的情况下可能未使用,并明确设置为0)。