【发布时间】:2013-01-24 03:44:54
【问题描述】:
我需要序列化一个任意 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可以优雅地按原样返回压缩纹理的数据,但它既不适用于非压缩图像,也没有对应的功能。
这些都不允许获取或设置未压缩纹理的原始数据。有什么办法吗?
【问题讨论】:
标签: opengl serialization textures