Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 2 of 2

Thread: shader with two textures

  1. #1
    Newbie Newbie
    Join Date
    Dec 2017
    Posts
    1

    Smile 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 :

    Code :
    #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

    Code :
    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 :

    Code :
    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 :-)

  2. #2
    Junior Member Regular Contributor
    Join Date
    Dec 2016
    Location
    Ocean Shores, WA USA
    Posts
    111
    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

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •