Kos*_*Kos 7 opengl serialization textures
我需要序列化一个任意的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是优雅的返回压缩纹理的数据,是的,但它也不适用于非压缩图像,也有一个对应的那会.
这些都不允许获取或设置非压缩纹理的原始数据.有办法吗?
诀窍是,找到格式匹配并键入产生正确的数据布局。
\n\n\n\n\n不过,允许的格式和类型不会 1:1 映射到图像格式,并且不允许在不进行额外转换的情况下获得更模糊的格式,例如 GL_R3_G3_B2。
\n
那将是 GL_RGB、GL_UNSIGNED_BYTE_3_3_2
\n\n\n\n\n此外,正确确定基本内部格式(例如没有大小的 GL_RGB)的 C 类型也涉及一些重要的工作。
\n
是的,它确实。*戴上太阳镜*处理它!;)
\n\n至于内部格式。我特此向您推荐
\n\nglGetTexLevelParameter(GL_TEXTURE_\xe2\x80\xa6, \xe2\x80\xa6, GL_TEXTURE_INTERNAL_FORMAT,\xe2\x80\xa6);\nglGetTexLevelParameter(GL_TEXTURE_\xe2\x80\xa6, \xe2\x80\xa6, GL_TEXTURE_{RED,GREEN,BLUE,ALPHA,DEPTH}_TYPE, \xe2\x80\xa6);\nglGetTexLevelParameter(GL_TEXTURE_\xe2\x80\xa6, \xe2\x80\xa6, GL_TEXTURE_{RED,GREEN,BLUE,ALPHA,DEPTH}_SIZE, \xe2\x80\xa6);\nRun Code Online (Sandbox Code Playgroud)\n