[osg-users] multiple pixel shaders for one program ?

Sebastien Nerig overseb77 at hotmail.com
Mon Nov 30 05:57:52 PST 2009


Hi robert
thx for your answer
Ok I tried what you said, but I still have a pb.

I made a shader "common.frag" with a basic fog function


Code:
uniform vec3 fogColor;
uniform float fogDensity;

vec3 fog(in vec3 color)
{
  const float LOG2 = 1.442695;
  float z = gl_FragCoord.z / gl_FragCoord.w;
  float fogFactor = exp2(-fogDensity * fogDensity * z * z * LOG2);
  fogFactor = clamp(fogFactor, 0.0, 1.0);
  return mix(fogColor, color, fogFactor);
}



And I did a "main.frag" with the main function


Code:
void main(void)
{
  vec3 color = vec3(1,1,1);
  color = fog(color);
  gl_FragColor = vec4(color, 1);
}



then I load thoses shaders into one program as fragment shader

Code:
osg::Program* program = new osg::Program; 
osg::Shader* shader = new osg::Shader(osg::Shader::FRAGMENT); 
shader->loadShaderSourceFromFile("common.frag"); 
program->addShader(shader); 
osg::Shader* shader1 = new osg::Shader(osg::Shader::FRAGMENT); 
shader1->loadShaderSourceFromFile("main.frag"); 
program->addShader(shader1)



But when OSG compile my shader, it fails because "fog" is not known in the main function. 
Any ideas ? If I find the solution I will post...

thanks a lot
Sebastien[/code]

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=20578#20578







More information about the osg-users mailing list