2

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

4

1 回答 1

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)。

于 2012-12-10T10:01:35.790 回答