【发布时间】:2019-10-19 08:13:23
【问题描述】:
我正在尝试让带有 ETC1 纹理的 glCompressedTexSubimage2d 在 OpenGL ES 3.2 上下文中工作。
我知道 glCompressedTexSubimage2d 被指定用于 ETC2 (https://www.khronos.org/opengles/sdk/docs/man32/html/glCompressedTexSubImage2D.xhtml) 但不适用于 ETC1。但是,ETC2 被定义为向后兼容 ETC1 (http://www.jacobstrom.com/publications/StromPetterssonGH07.pdf),因此任何 ETC1 纹理也应该是有效的 ETC2 纹理(如果我错了,请纠正我) - 所以我使用 GL_COMPRESSED_RGB8_ETC2 作为内部格式而不是 GL_ETC1_RGB8_OES对于目标以及上传的子纹理。目标和上传的子纹理在每个维度上都是 4 的倍数,并且偏移量也与 4 的倍数对齐。
但是,我在调用时遇到了 Invalid_Operation 错误,例如使用以下参数:
*** GL error after call to CompressedTexSubImage2D(target = GL_TEXTURE_2D, level = 0, xoffset = 0, yoffset = 2048, width = 512, height = 1024, format = GL_COMPRESSED_RGB8_ETC2, imageSize = 262144, data = 0xc13ab008): invalid operation
在这种情况下,压缩后的目标纹理大小为 1024x4096
相同的代码(OpenGL 等效)适用于在 Windows 上运行的 dxt1。
我是否正确,这应该按预期工作,还是我忽略了一些限制?
【问题讨论】: