Jump to content
  • Advertisement
Sign in to follow this  
Valeranth

[SOLVED] [GLSL] help with sampler2D

This topic is 3542 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, I am currently working on a shader for a multi-textured RTT. Currently, however, the first sampler2D comes out a greenish color while the second is clear. Any ideas? vertex shader
varying vec2 TexCoord;

void main(){
        //gl_TexCoord[0] = gl_MultiTexCoord0; //NOTE:uncommening does nothing
        TexCoord = gl_MultiTexCoord0.st;
        gl_Position = ftransform();
}



fragment shader
uniform sampler2D tex0;
uniform sampler2D tex1;

varying vec2 TexCoord;

void main(){
        vec4 textel0 = texture2D( tex0, TexCoord );
        vec4 textel1 = texture2D( tex1, TexCoord );
        vec3 temp = mix( textel0.rgb, textel1.rgb, textel1.a );
        gl_FragColor = vec4(temp, textel0.a );
}



bound with
void glslSetValue1i( GLuint program, GLchar *name, GLint value ){
        GLint location;
        location = glGetUniformLocation( program, name );
        if( location == -1 ){
                printf("Error:: GLSL >> Error setting %s to %i\n", name, value );
                return;
        }

        glUniform1i( location, value );
}

....
glslSetValue1i( pro, "tex0", 0 );
glslSetValue1i( pro, "tex1", 1 );



edit: the draw code lol
//enable texture0, base
        glActiveTexture(GL_TEXTURE0);
        glBindTexture( GL_TEXTURE_2D, base->GetID());

        //enable texture1, object
        glActiveTexture(GL_TEXTURE1);
        glBindTexture( GL_TEXTURE_2D, object->GetID());

        // set the texture as render target
        glDrawBuffer (GL_COLOR_ATTACHMENT0_EXT);

        //insure that everythign is being rendered by the shader
        glPolygonMode(GL_FRONT,GL_FILL);
        glLoadIdentity();

        //set up the viewport 
        glViewport( 0, 0, base->GetWidth(), base->GetHeight() );

        glTranslatef( 0.0, 0.0, -1.0 );

        glBegin(GL_QUADS);
                //glTexCoord2f(0.0, 0.0); 
                glVertex3f( -1.0, 1.0, 0.0 );

                //glTexCoord2f( 1.0, 0.0 );
                glVertex3f( 1.0, 1.0, 0.0 );

                //glTexCoord2f( 1.0, 1.0 );
                glVertex3f( 1.0, -1.0, 0.0 );

                //glTexCoord2f( 0.0, 1.0 );
                glVertex3f( -1.0, -1.0, 0.0 );
        glEnd();

        //unbind the texture occupying the second texture unit
        glActiveTexture( GL_TEXTURE1 );
        glBindTexture( GL_TEXTURE_2D, 0 );

        //unbind the texture occupying the first texture unit
        glActiveTexture( GL_TEXTURE0 );
        glBindTexture( GL_TEXTURE_2D, 0 );

        glDrawBuffer(0);
        //render back to the standard buffer
        glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );


[Edited by - Valeranth on November 8, 2008 6:11:05 PM]

Share this post


Link to post
Share on other sites
Advertisement
At first glance your code all makes sense..

You say one texture comes out green and the other clear...
I don't follow you as you are mixing the two in your shaders.. This may be exactly what should happen when you factor in the .a blending and the actual content of the two textures...

Things to be aware of.. Are you doing any lighting?
Are you setting up the Texture coordinates as you need them in your main C++ code? Because you are using the fixed pipeline Texture coord stuff to load TexCoord in your shaders.

Share this post


Link to post
Share on other sites
Quote:
Original post by scratt
Things to be aware of.. Are you doing any lighting?
Are you setting up the Texture coordinates as you need them in your main C++ code? Because you are using the fixed pipeline Texture coord stuff to load TexCoord in your shaders.


First when I do gl_FragColor = texel0; it just shows green, with texel1 is clear..
No lighting, and the other things I dont know what you mean.

Share this post


Link to post
Share on other sites
Quote:
Original post by V-man
http://www.opengl.org/wiki/index.php/Debugging_Tools


Sadly, I havnt found a debugger that runs in Linux.. :/

Share this post


Link to post
Share on other sites
You have commented glTexCoord2f calls, any reason why ?

Also check if you have texturing enabled, have proper filtering set (and/or mipmaps generated) etc.

Share this post


Link to post
Share on other sites
fixed it, I had commented the glTexCoord becouse I didnt think I needed them, the error was in the drawing code (as has been pointed out here)

[drawing]

glBegin(GL_QUADS);
glMultiTexCoord2f( GL_TEXTURE0, 0.0, 0.0 );
glMultiTexCoord2f( GL_TEXTURE1, 0.0 + xOffset, 0.0 + yOffset );
glVertex3f( -1.0, -1.0, 0.0 );

glMultiTexCoord2f( GL_TEXTURE0, 1.0, 0.0 );
glMultiTexCoord2f( GL_TEXTURE1, 1.0 + xOffset, 0.0 + yOffset );
glVertex3f( 1.0, -1.0, 0.0 );

glMultiTexCoord2f( GL_TEXTURE0, 1.0, 1.0 );
glMultiTexCoord2f( GL_TEXTURE1, 1.0 + xOffset, 1.0 + yOffset );
glVertex3f( 1.0, 1.0, 0.0 );

glMultiTexCoord2f( GL_TEXTURE0, 0.0, 1.0 );
glMultiTexCoord2f( GL_TEXTURE1, 0.0 + xOffset, 1.0 + yOffset );
glVertex3f( -1.0, 1.0, 0.0 );
glEnd();



and the shaders (not much change )


[vertex]
void main(){
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = gl_MultiTexCoord1;
gl_Position = ftransform();
}

[fragement]
uniform sampler2D tex0;
uniform sampler2D tex1;

void main(){
vec4 textel0 = texture2D( tex0, gl_TexCoord[0].st );
vec4 textel1 = texture2D( tex1, gl_TexCoord[1].st );
vec3 temp = mix( textel0.rgb, textel1.rgb, textel1.a );
gl_FragData[0] = vec4( temp, textel0.a );

}




THANKS FOR THE HELP!! ^__^

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!