OpenGL:纹理有存储吗?

时间:2015-09-11 14:09:01

标签: opengl-es-2.0

在OpenGL中,生成纹理名称后,纹理没有存储空间。使用glTexImage2D,您可以为纹理创建存储空间。

如何判断纹理是否有存储空间?

2 个答案:

答案 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来获取纹理的高度(或宽度)。这些参数之一的值为零意味着纹理名称表示空纹理。

注意我还没有测试过这个!