[osg-users] Why are my shaders not being used?

Julien Valentin julienvalentin51 at gmail.com
Fri Jan 19 13:02:32 PST 2018


look command line results
Code:

0(2) : error C7616: global function ftransform is removed after version 140




arennuit wrote:
> Hi all,
> 
> The following code renders the square in red (fixed pipeline) rather green (shaders), I guess the shaders are not used.
> 
> 
> Code:
> 
> #define GLSL330(program) "#version 150\n" #program
> 
> const char* vertSource = GLSL330
> (
>     void main(void)
>     {
>         gl_Position = ftransform();
>     }
> );
> 
> const char* fragSource = GLSL330
> (
>     void main(void)
>     {
>         gl_FragColor = vec4(0,1,0,1);
>     }
> );
> 
> ////////////////////////////////////////////////////////////////////////////////
> osg::ref_ptr<osg::Geode> SetupNurbsSurface()
> {
>     osg::ref_ptr<osg::Geode> geode = new osg::Geode();
>     assert(geode);
>     osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry();
>     assert(geometry);
>     osg::ref_ptr<osg::Vec3Array> vertices_osg = new osg::Vec3Array();
>     assert(vertices_osg);
>     osg::ref_ptr<osg::Vec3Array> normals_osg = new osg::Vec3Array();
>     assert(normals_osg);
>     osg::ref_ptr<osg::DrawElementsUInt> triangles_osg = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
>     assert(triangles_osg);
>     osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array();
>     assert(colors);
> 
>     // Setup.
>     geode->addDrawable(geometry);
>     geometry->setVertexArray(vertices_osg);
>     geometry->setNormalArray(normals_osg);
>     geometry->addPrimitiveSet(triangles_osg);
>     geometry->setColorArray(colors);
> 
>     // Vertices.
>     vertices_osg->push_back(osg::Vec3(-1.0f,  0.0f, 1.0f));
>     vertices_osg->push_back(osg::Vec3(-1.0f,  0.0f, 2.0f));
>     vertices_osg->push_back(osg::Vec3(-1.0f, -1.0f, 2.0f));
>     vertices_osg->push_back(osg::Vec3(-1.0f, -1.0f, 1.0f));
> 
>     // Triangles (primitive sets).
>     triangles_osg->push_back(0);
>     triangles_osg->push_back(1);
>     triangles_osg->push_back(2);
>     triangles_osg->push_back(0);
>     triangles_osg->push_back(2);
>     triangles_osg->push_back(3);
> 
>     // Colors.
>     colors->setBinding(osg::Array::BIND_OVERALL);
>     colors->push_back(osg::Vec4f(1.0f, 0.0f, 0.0f, 1.0f));
> 
>     // Normals.
>     normals_osg->setBinding(osg::Array::BIND_PER_VERTEX);
>     normals_osg->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
>     normals_osg->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
>     normals_osg->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
>     normals_osg->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
>     normals_osg->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
>     normals_osg->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
> 
>     // State.
>     osg::ref_ptr<osg::Shader> vertShader = new osg::Shader( osg::Shader::VERTEX, vertSource );
> 
>     osg::ref_ptr<osg::Shader> fragShader = new osg::Shader( osg::Shader::FRAGMENT, fragSource );
> 
>     osg::ref_ptr<osg::Program> program = new osg::Program;
>     program->addShader( vertShader.get() );
>     program->addShader( fragShader.get() );
> 
>     osg::ref_ptr<osg::StateSet> state = geode->getOrCreateStateSet();
>     assert(state);
> 
>     state->setAttributeAndModes( program.get(), osg::StateAttribute::ON );
> //    state->addUniform("TODO");
> 
>     return geode;
> }
> 
> 
> 
> 
> Any idea of what is going on?
> 
> Thanks!
> 
> Regards,
> 
> Antoine[/code]


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







More information about the osg-users mailing list