在OpenGL 2.1中使用纹理之前是否需要调用glEnable(GL_TEXTURE)?

时间:2013-01-06 05:06:12

标签: opengl textures

在OpenGL 2.1+中我们需要在使用纹理之前调用glEnable(GL_TEXTURE)吗?如果我们遇到纹理问题,可能是什么原因?

更新

我正在使用OpenGL 2.1 for Desktop,我的步骤是:

  1. 加载bmp 24位图像(我在gDebuger中检查过,它显示我的纹理正常,所以我确定我的加载图像程序没有失败)。

  2. init() procedude中调用几个OpenGL函数:

    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);
    
  3. 在draw_scene()中:

    glUseProgram(program);
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture_id);
    glUniform1i(uniform_texture, 0);
    ...
    
  4. 顶点着色器(版本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;
    }
    
  5. 片段着色器:

    uniform sampler2D my_texture;
    varying vec2 fragTexCoord;
    
    void main()
    {
        gl_FragColor = texture2D(my_texture, fragTexCoord);
    }
    

1 个答案:

答案 0 :(得分:3)

如果在OpenGL 2.1中使用GLSL着色器,则对glEnable(GL_TEXTURE_*)的调用没有意义。您可以在片段着色器中应用纹理。

如果您打算转到OpenGL 3.x核心配置文件,请注意不推荐使用glEnable(GL_TEXTURE_*)