Sign in to follow this  
Valeranth

[SOLVED] [GLSL] help with sampler2D

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this