当我在未压缩纹理上激活mipmaping时,一切都运行良好。
当我在ETC1纹理上执行时,纹理是空白的,当然因为没有给出完整的mipmap集。
代码非常简单,适用于iPhone(当然还有PVR压缩)。
它不适用于Android。 mipmap是使用外部工具构建的,并且一起过去。
我停止制作大小为4的mipmap,因为如果尝试使用较低的mipmap,glCompressedTexImage2D会返回一个opengl错误。
for(u32 i=0; i<=levels; i++)
{
size = KC_TexByte(pagex, pagey, tex_type);
glCompressedTexImage2D(GL_TEXTURE_2D, i, type, pagex, pagey, 0, size, ptr);
pagex = MAX(pagex/2, 4);
pagey = MAX(pagey/2, 4);
ptr += size;
KC_Error(); // test openGL error
}
答案 0 :(得分:2)
纹理为空白的原因是因为要求mipmap一直到1x1。
我认为你用小压缩纹理得到的错误是因为你试图使用的纹理格式(etc1?)不支持这些尺寸。您必须使用那些小尺寸的非压缩图像......
答案 1 :(得分:1)
谢谢,但你的解决方案不是正确的;我找到了另一个解决方案。
正确的方法是:
请记住它是使用bloc的压缩数据,因此BYTE中的大小每步不会超过4。在8x8之后,尺寸保持相同的值。
sx = size in X
sy = size in Y
byte = ((sx+3)/4)*((sy+3)/4) * 8 * 2; // 8 = bit per pixel
答案 2 :(得分:0)
for(u32 i=0; i<=levels; i++)
似乎您需要i < levels
而不是<=
。