Jump to content

  • Log In with Google      Sign In   
  • Create Account


[SOLVED] [GLSL] help with sampler2D


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
6 replies to this topic

#1 Valeranth   Members   -  Reputation: 100

Like
0Likes
Like

Posted 07 November 2008 - 12:36 PM

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]

Sponsor:

#2 scratt   Members   -  Reputation: 102

Like
0Likes
Like

Posted 07 November 2008 - 01:49 PM

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.



#3 Valeranth   Members   -  Reputation: 100

Like
0Likes
Like

Posted 07 November 2008 - 02:30 PM

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.


#4 V-man   Members   -  Reputation: 805

Like
0Likes
Like

Posted 08 November 2008 - 12:33 AM

http://www.opengl.org/wiki/index.php/Debugging_Tools

#5 Valeranth   Members   -  Reputation: 100

Like
0Likes
Like

Posted 08 November 2008 - 05:12 AM

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.. :/



#6 snoutmate   Members   -  Reputation: 337

Like
0Likes
Like

Posted 08 November 2008 - 11:11 AM

You have commented glTexCoord2f calls, any reason why ?

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


#7 Valeranth   Members   -  Reputation: 100

Like
0Likes
Like

Posted 08 November 2008 - 12:10 PM

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!! ^__^




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS