在OpenGL 2.1+中我们需要glEnable(GL_TEXTURE)在使用纹理之前调用吗?如果我们遇到纹理问题,可能是什么原因?
更新:
我正在使用OpenGL 2.1 for Desktop,我的步骤是:
加载bmp 24位图像(我在gDebuger中检查它显示我的纹理正常,所以我确定我的加载图像程序没有失败).
在程序中调用几个OpenGL函数init():
glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image_width, image_height, 0, GL_BGR, GL_UNSIGNED_BYTE, image_data);
Run Code Online (Sandbox Code Playgroud)在draw_scene()中:
glUseProgram(program);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture_id);
glUniform1i(uniform_texture, 0);
...
Run Code Online (Sandbox Code Playgroud)顶点着色器(版本120):
attribute vec3 vPos;
attribute vec2 vTexCoord;
uniform mat4 MV;
uniform mat4 Projection;
varying vec2 fragTexCoord;
void main()
{
fragTexCoord = vTexCoord;
gl_Position = Projection * MV * vPos;
}
Run Code Online (Sandbox Code Playgroud)片段着色器:
uniform sampler2D my_texture;
varying vec2 fragTexCoord;
void main()
{
gl_FragColor = texture2D(my_texture, fragTexCoord);
}
Run Code Online (Sandbox Code Playgroud)如果您在 OpenGL 2.1 中使用 GLSL 着色器,则对 的调用glEnable(GL_TEXTURE_*)没有意义。您在片段着色器中应用纹理。
如果您打算继续使用 OpenGL 3.x 核心配置文件,请记住它glEnable(GL_TEXTURE_*)已被弃用。