Vertex Shaders overrides TexGen functionality (like other transform and lighting functionality). You need to add Tex Coord generation code to shader. I briefly looked at your code and suppose that following change in shader would do it (sorry had no time to check it). I could recommend chapter 9 "Emulating OpenGL Fixed Functionality" of Addison Wesley "OpenGL Shading Language" book.

uniform int transformModeX;

void main()
{
#if 1 //  Emulate TexGen Object mode at texture stage 0
   gl_TexCoord[0].s = dot(gl_Vertex, gl_ObjectPlaneS[0]);
   gl_TexCoord[0].t = dot(gl_Vertex, gl_ObjectPlaneT[0]);
   gl_TexCoord[0].p = dot(gl_Vertex, gl_ObjectPlaneR[0]);
   gl_TexCoord[0].q = dot(gl_Vertex, gl_ObjectPlaneQ[0]);
#else
   gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
#endif
   gl_FrontColor = gl_Color;
   gl_BackColor = gl_Color;
   vec4 v = vec4(gl_Vertex);
   // Change the test to transformModeX == 0 to enable.
   // This is here to help verify that this shader is actually being used.
   // Change the C code's gluOrtho2D call so the camera gets
   // a better picture. (Switch the one that is commented out.)
   if(transformModeX == 1)
   {
       // The multiply factor makes this log10()
       v.x = log2(v.x) * 0.301029995664;
   }
   gl_ClipVertex = gl_ModelViewMatrix * v;
   gl_Position = gl_ModelViewProjectionMatrix * v;
}

Cheers,
Wojtek Lewandowski

----- Original Message ----- From: "E. Wing" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, January 24, 2007 6:32 AM
Subject: [osg-users] Problem using a Vertex Shader with TexGen


I am trying to produce a simple cheesy effect. I am trying to make a
moving dotted line (think similar to a barber shop pole).

- I start with a GL_LINE_STRIP.

- Then I add a 1D texture to it so I can control how it looks and how
it moves. (Currently it is an alternating off-on texture so it looks
like a dotted line.)

- I use osg::TexGen to generate texture coordinates for me. (In my
general case, I may add or subtract points to my line so I didn't want
to have to manually set TexCoords myself.)

- I then use osg::TexMat to generate movement

This all seems to work well enough.

But my final step is where things seem to break. I then add a Vertex
Shader to the mix. When I do this, my line does not render correctly.
Often I seem to get a line that completely flashes off or on, rather
than seeing the animated dots.

To start with, I'm just trying to write a simple vertex shader that is
effectively a pass-through program so it should look identical to the
fixed pipeline program. I have been able to reproduce the problem on
both Mac and Windows (with different video cards). So I'm guess I'm
missing something important.

If I remove the glTexGen stuff and set the glTexCoord manually, things
seem to work, but I would like to know how to get it to work with
glTexGen as well. (It makes my general case easier.) I assume I'm
doing something wrong with either my shader or the way I set up
TexGen.

Attached is a tar-ball containing the source to two programs plus my
vertex shader. One uses TexGen, the other does not. In the program
that uses TexGen, there is a single line of code that will make or
break the program. Search for "KEY LINE". If the line is enabled, the
shader is used and I get the flashing. If disabled, the program works
as expected. (Also, I think I might have found a bug in OSG. As noted
in the comment, if I set the stateset's setAttributeAndModes to
osg::StateAttribute::OFF, the shader still gets loaded and run.)


Can somebody tell me how to fix my program so it works with TexGen?

This is the build line I use for Mac:
g++ -D__USE_OSX_AGL_IMPLEMENTATION__ shader_<no>texgen.cpp -framework
osg -framework osgUtil -framework osgDB -framework osgGA -framework
osgProducer -framework Producer -framework OpenThreads -framework
osgText -framework OpenGL
(Adapt as necessary for your platform.)


Thanks,
Eric




_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/


_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to