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

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

Reply via email to