即使在查看规范中的状态表之后,我也找不到一种非常好的方法.两种可能性都很不具吸引力:
>尝试将其绑定到各种目标,并查看是否收到GL_INVALID_OPERATION错误:
glBindTexture(GL_TEXTURE_1D, texId);
if (glGetError() != GL_INVALID_OPERATION) {
return GL_TEXTURE_1D;
}
glBindTexture(GL_TEXTURE_2D, texId);
if (glGetError() != GL_INVALID_OPERATION) {
return GL_TEXTURE_2D;
}
...
>这与@glamplert建议的类似.使用glBindTextures()将纹理绑定到给定的纹理单元,然后查询绑定到该单元的各个目标的纹理:
glBindTextures(texUnit, 1, &texId);
glActiveTexture(GL_TEXTURE0 + texUnit);
GLuint boundId = 0;
glGetIntegerv(GL_TEXTURE_BINDING_1D, &boundId);
if (boundId == texId) {
return GL_TEXTURE_1D;
}
glGetIntegerv(GL_TEXTURE_BINDING_2D, &boundId);
if (boundId == texId) {
return GL_TEXTURE_2D;
}
但是,如果您只是在第一次创建时存储每个纹理使用哪个目标,我认为您会更高兴.