我需要序列化任意 OpenGL 纹理对象,以便以后能够使用完全相同的状态和数据恢复它。
我正在寻找一种获取纹理图像数据的方法。这是我到目前为止发现的:
有
glGetTexImage
。它允许获取纹理图像,但它需要一个指定的格式/类型对(如 (
GL_RGB
,GL_HALF_FLOAT
) 来执行转换。但是,允许的格式和类型不会 1:1 映射到图像格式,并且不允许在
GL_R3_G3_B2
没有额外转换的情况下获得更模糊的格式。正确确定基本内部格式的 C 类型(例如
GL_RGB
没有大小)还需要一些不平凡的工作。有
ARB_internalformat_query2
允许要求GL_GET_TEXTURE_IMAGE_FORMAT
并且代表给定纹理GL_GET_TEXTURE_IMAGE_TYPE
的最佳选择。glGetTexImage
很好,但受到与相同的限制
glGetTexImage
并且没有广泛使用。有一种美妙的
glGetCompressedTexImage
方式可以优雅地按原样返回压缩纹理的数据,但它既不适用于非压缩图像,也没有对应的功能。
这些都不允许获取或设置非压缩纹理的原始数据。有办法吗?