RGBA4444纹理在iPhone上变成了黑盒子

时间:2018-04-29 16:02:34

标签: ios iphone

我计划使用RGBA4444纹理来减少iPhone的内存使用量,但令我惊讶的是,创建的纹理在屏幕上总是一个黑盒子,相同的代码在Win10上运行正常。这是我用来创建RGBA4444纹理的代码:

{
    const int texSize = 256;
    vector<unsigned char> bytes(texSize * texSize * 2, 0xFF);

    GLuint id = 0;
    glGenTextures(1, &id);
    glBindTexture(GL_TEXTURE_2D, id);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA4, texSize, texSize, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, &bytes[0]);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}

我完全不知所措,RGBA4444原生支持iphone吧?

在iPhone5s和iPad3上进行了测试,两者都是黑盒子。

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,事实证明internalFormat不正确:

glTexImage2D(GL_TEXTURE_2D
    , 0
    , GL_RGBA4  // <---- should be GL_RGBA instead of GL_RGBA4 on iPhone
    , texSize
    , texSize
    , 0
    , GL_RGBA
    , GL_UNSIGNED_SHORT_4_4_4_4
    , &bytes[0])
    ;

在Win10上,当internalFormat是GL_RGBA4(GLAD,es2.0)时它可以正常工作,但根据这个glTexImage2D,可接受的internalFormats是GL_ALPHA,GL_LUMINANCE,GL_LUMINANCE_ALPHA,GL_RGB,GL_RGBA,所以即使在WIN10上, RGBA4444的正确internalFormat仍然应该是GL_RGBA。