在OpenGL中,生成纹理名称后,纹理没有存储空间。使用glTexImage2D,您可以为纹理创建存储空间。
如何判断纹理是否有存储空间?
答案 0 :(得分:2)
你无法在ES 2.0中做到这一点。在ES 3.1及更高版本中,您可以调用:
GLint width = 0;
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
if (width > 0) {
// texture has storage
}
ES 2.0中提供的glIsTexture()
调用可能会根据您的要求提供所需的信息。虽然它不会告诉你纹理是否有存储,它会告诉你给定的id是否有效,以及它是否被绑定为纹理。例如:
GLuint texId = 0;
GLboolean isTex = glIsTexture(texId);
// Result is GL_FALSE because texId is not a valid texture name.
glGenTextures(1, &texId);
isTex = glIsTexture(texId);
// Result is GL_FALSE because, while texId is a valid name, it was never
// bound yet, so the texture object has not been created.
glBindTexture(GL_TEXTURE_2D, texId);
glBindTexture(GL_TEXTURE_2D, 0);
isTex = glIsTexture(texId);
// Result is GL_TRUE because the texture object was created when the
// texture was previously bound.
答案 1 :(得分:1)
我相信您可以使用glGetTexLevelParameterfv来获取纹理的高度(或宽度)。这些参数之一的值为零意味着纹理名称表示空纹理。
注意我还没有测试过这个!