我计划使用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上进行了测试,两者都是黑盒子。 谢谢。答案 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。