Hi Robert,I've done my best to follow your instructions. See attached changes vs. trunk.
The shadercomposition example still works as expected.Comparing the outputs however, an additional program is build, and I'm quite clueless, if my refactoring is correct (see attached outputs)
I'd appreciate some advices here.
Hi Sebastian,On 27 November 2013 11:26, Sebastian Messerschmidt <[email protected] <mailto:[email protected]>> wrote:Okay I can try to refactor it, but I'm not 100% sure if I got you right. Would the caching attribute (last_applied_shadercomponent) still be used then?I'm thinking last_applied_shadercomponent would be redundent and could be removed.Also do you mean by "get the last applied StateAttribute's from the AttributeStack" to use the last_applied_attribute member?Yes, use last_applied_attribute instead of last_applied_shadercomponent. The code associated with the later could be completely removed from osg::State so would simply it a little.Simplifying code and providing greater extensibility sounds like a good design change to me :-)Robert. _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
osg_submission_shadercomposer.7z
Description: Binary data
ShaderComposer::getOrCreateProgram(shaderComponents.size()==1
ShaderComposer::composeMain(Shaders) shaders.size()==1
type ==35633
full_source ==
varying vec4 color;
varying vec4 texcoord;
void main(void)
{
color = gl_Color;
texcoord = gl_MultiTexCoord0;
gl_Position = ftransform();
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::composeMain(Shaders) shaders.size()==1
type ==35632
full_source ==
varying vec4 color;
varying vec4 texcoord;
uniform sampler2D baseTexture;
void main(void)
{
gl_FragColor = color * texture2DProj( baseTexture, texcoord );
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==2
ShaderComposer::composeMain(Shaders) shaders.size()==2
type ==35632
full_source ==
varying vec4 color;
varying vec4 texcoord;
uniform sampler2D baseTexture;
void main(void)
{
gl_FragColor = color * texture2DProj( baseTexture, texcoord );
gl_FragColor.a = gl_FragColor.a*0.5;
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==2
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==2
ShaderComposer::composeMain(Shaders) shaders.size()==1
type ==35633
full_source ==
void main(void)
{
gl_Position = ftransform();
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::composeMain(Shaders) shaders.size()==1
type ==35632
full_source ==
uniform vec4 newColour;
uniform float osg_FrameTime;
void main(void)
{
gl_FragColor = vec4(newColour.r,newColour.g,newColour.b,
0.5+sin(osg_FrameTime*2.0)*0.5);
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==2
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==2
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==1
ShaderComposer::composeMain(Shaders) shaders.size()==1
type ==35633
full_source ==
varying vec4 color;
varying vec4 texcoord;
void main(void)
{
color = gl_Color;
texcoord = gl_MultiTexCoord0;
gl_Position = ftransform();
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::composeMain(Shaders) shaders.size()==1
type ==35632
full_source ==
varying vec4 color;
varying vec4 texcoord;
uniform sampler2D baseTexture;
void main(void)
{
gl_FragColor = color * texture2DProj( baseTexture, texcoord );
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==2
ShaderComposer::composeMain(Shaders) shaders.size()==2
type ==35632
full_source ==
varying vec4 color;
varying vec4 texcoord;
uniform sampler2D baseTexture;
void main(void)
{
gl_FragColor = color * texture2DProj( baseTexture, texcoord );
gl_FragColor.a = gl_FragColor.a*0.5;
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==2
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==2
ShaderComposer::composeMain(Shaders) shaders.size()==1
type ==35633
full_source ==
void main(void)
{
gl_Position = ftransform();
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::composeMain(Shaders) shaders.size()==1
type ==35632
full_source ==
uniform vec4 newColour;
uniform float osg_FrameTime;
void main(void)
{
gl_FragColor = vec4(newColour.r,newColour.g,newColour.b,
0.5+sin(osg_FrameTime*2.0)*0.5);
}
end of ShaderComposer::composeMain(Shaders)
ShaderComposer::getOrCreateProgram(..) created new Program
ShaderComposer::getOrCreateProgram(shaderComponents.size()==2
ShaderComposer::getOrCreateProgram(..) created new Program
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

