shader with two textures

Hello, I want to show a small transparent texture B over a large texture A.
I want only the texture A for VAO[0]
and only texture B for VAO[1]
but openGL don’t understand that and mix texture A with texture B over the vao[0] and over the vao[1] too.

Here is my shader.fp :

#version 150 core

// Entrée
in vec2 coordTexture;

// Uniform
uniform sampler2D texBackground; // my textureA
uniform sampler2D texMenu; // my texture B

// Sortie 
out vec4 outColor;

void main()  
{
    vec4 colBackground = texture(texBackground, coordTexture);
    vec4 colMenu = texture(texMenu, coordTexture) * vec4(1.0, 1.0, 1.0, 0.5);
    outColor = mix(colBackground, colMenu, 0.5);
}

Here is my load textures :
loadTexture(0) for texture A and loadTexture(1) for texture B


void GameRender::loadTexture(int const &IdTexture) {
        // generate texture names
        VTexture.push_back(0);
        glGenTextures(1, &VTexture.back());

        GLenum err;
        while((err = glGetError()) != GL_NO_ERROR) {
            std::cerr << "(gameRender.cpp) OpenGL generate textures, error : " << err << std::endl;
            return -1;
        }

        // utilisation des textures
        if(!IdTexture)
            glActiveTexture(GL_TEXTURE0);
        else
            glActiveTexture(GL_TEXTURE1);

        glBindTexture(GL_TEXTURE_2D, VTexture.back());

        // specify a two-dimensional texture image
        if(PVImage_)
            glTexImage2D(GL_TEXTURE_2D, 0, 3, PVImage_.data()->back().size().width, PVImage_.data()->back().size().height, 0, GL_RGB, GL_UNSIGNED_BYTE, it->data);

        // set textures parameters
        // GL_NEAREST : Returns the value of the texture element that is nearest (in Manhattan distance) to the specified texture coordinates.
        // GL_TEXTURE_MAG_FILTER : The texture magnification function is used whenever the level-of-detail function used when sampling from the
        // texture determines that the texture should be magified.
        // GL_TEXTURE_MIN_FILTER : The texture minifying function is used whenever the level-of-detail function used when sampling from the texture
        // determines that the texture should be minified.
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}

And now my paint, I’m working with QT :

void GameRender::paintGL()
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef (0.0, 0.0, -5.0);

    GLint uniformId = glGetUniformLocation(programID, "resolution");

    // activation du shader
    glUseProgram(getProgramID());

    glUniform2i(uniformId, width_, height_);

    glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);

    glEnable(GL_TEXTURE_2D);

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, VTexture.front());
    glUniform1i(glGetUniformLocation(programID, "texBackground"), 0);

    // dessine les objets au format triangles
    vao[0].bind();
    glDrawArrays(GL_TRIANGLES, 0, 6);
    vao[0].release();

    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, VTexture.back());
    glUniform1i(glGetUniformLocation(programID, "texMenu"), 1);

    vao[1].bind();
    glDrawArrays(GL_TRIANGLES, 0, 6);
    vao[1].release();

    // lance le shader
    glUseProgram(0);
}

Thank you, sorry for my bad english :slight_smile:

Not sure if you are using the same opengl context that I am, but I just made a video on how to blend textures with color, based on the tutorial here:

http://www.learnopengl.com

Here’s a link to the video:

https://www.youtube.com/watch?v=ZTRGC9oG8Qw

Thanks, let me know if this helps, or what you think,

Jeff