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

6
在OpenGL 2.1+中,我们需要在使用纹理之前调用glEnable(GL_TEXTURE)吗?如果遇到纹理问题,可能的原因是什么? 更新: 我正在桌面上使用OpenGL 2.1,我的步骤如下:
  1. Load bmp 24 bit image (I checked in gDebuger and it show my texture ok, so i'm sure my load image procedure not failed).

  2. Call several OpenGL functions in init() procedude:

    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. And in draw_scene():

    glUseProgram(program);
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture_id);
    glUniform1i(uniform_texture, 0);
    ...
    
  4. Vertex shader (version 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. Fragment shader:

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

1
如果您正在使用着色器,那么我怀疑 glEnable(GL_TEXTURE) 不会有任何作用。您能否给我们提供一个屏幕截图,或更详细地描述您输出的问题? - TheAmateurProgrammer
我认为我的一些参数出现了错误,我已经清理并重写了所有的纹理代码,现在它可以工作了!有人能解释一下 internalFormatGL_RGBA8GL_RGBA 等之间的不同吗?如果我在 internalFormat 中使用了 GL_RGB,那么我是否可以在片段着色器中访问 alpha 元素,例如:texture2D(myTexture, texCoord).a - Bình Nguyên
1个回答

4
如果您在OpenGL 2.1中使用GLSL着色器,则调用glEnable(GL_TEXTURE_*)没有意义。您需要在片段着色器中应用纹理。
如果您打算转向OpenGL 3.x核心配置文件,请记住glEnable(GL_TEXTURE_*)已被弃用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接