[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