我有一些图像,我知道将存储或PVR或其他压缩。我希望能够将这些图像转换为未压缩的RGB。但是,由于二进制大小的限制,我想这样做,而不添加一个专门的库进行转换。
有什么办法可以做到吗?我知道像glCompressedTexImage2D这样的函数会让我把压缩图像加载到GPU。然而,我在阅读解码版本时遇到了问题。对于额外的上下文,我尝试用OpenGL ES 2.0来完成这个任务。
谢谢!
发布于 2018-01-17 06:11:32
桌面OpenGL要求实现在图像的内部格式和像素传输命令中指定的格式之间转换像素数据。
OpenGL ES没有。实际上,不允许这样做是非常严肃的,以至于它实际上将参数的含义更改为像glTexImage*d这样的函数。在ES中,您不能使用大小大小的内部格式(在纹理存储调用之外)。相反,内部的格式是存在的。真正定义内部格式的是像素格式和类型参数。
也就是说,当您告诉OpenGL ES,您提供的像素数据看起来像X时,它需要实现创建一个纹理,其真正的内部格式与之完全匹配。如果使用的是glTexSubImage*d或glGetTexImage,则必须提供与glTexImage*d调用提供的像素传输参数相匹配的像素传输参数。
所以OpenGL ES不允许任何像素转换。
发布于 2018-01-17 22:36:16
这篇文章中的评论是正确的。OpenGL ES并不支持直接读取纹理。
在给定约束条件下,最好的选择似乎是将压缩的纹理画到一个四角体上,然后再读出来。(与"Simon F“在上述问题注释线程中的建议相同。)
作为对遇到同样问题的人的参考,这是一个不同但相似的问题的答案。给出了执行上述操作的步骤。
https://computergraphics.stackexchange.com/questions/6127
复制相似问题