Hi,
I found this tutorial which was very convenient: http://www.openscenegraph.org/documentation/NPSTutorials/osgGL2ShaderIntro.htm But the problem was the path of my shader files. Now I have solved that, it compiles but there is still a problem remaining: Code: VERTEX glCompileShader "" FAILED VERTEX Shader "" infolog: 0(3) : error C1008: undefined variable "glPosition" 0(3) : error C1008: undefined variable "glProjectionMatrix" 0(3) : error C1008: undefined variable "glModelViewMatrix" 0(3) : error C1008: undefined variable "glVertex" glLinkProgram "" FAILED Program "" infolog: Vertex info ----------- 0(3) : error C1008: undefined variable "glPosition" 0(3) : error C1008: undefined variable "glProjectionMatrix" 0(3) : error C1008: undefined variable "glModelViewMatrix" 0(3) : error C1008: undefined variable "glVertex" I give you my new code: Code: #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers> #include <osgGA/StateSetManipulator> #include <osgDB/ReadFile> #include <osg/Uniform> #include <osg/Geode> #include <osg/Node> #include <osg/Group> #include <osg/Vec3> #include <osg/Vec4> #include <osg/ShapeDrawable> #include <osg/Shader> #include <osg/Program> #include <osg/ref_ptr> int main(int ac, char **av) { osg::Vec4 red(1.0, 0.0, 0.0, 1.0); osg::setNotifyLevel(osg::NOTICE); // Viewer init osgViewer::Viewer viewer; viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet())); viewer.addEventHandler(new osgViewer::StatsHandler()); //viewer.addEventHandler(new osgViewer::ThreadingHandler); viewer.addEventHandler(new osgViewer::WindowSizeHandler); viewer.setUpViewInWindow(100, 100, 800, 600); //root osg::Group* rootNode = new osg::Group(); //objet de la scene osg::Geode* MaGeode = new osg::Geode(); rootNode->addChild(MaGeode); // Sphere osg::ShapeDrawable* sd = new osg::ShapeDrawable; osg::Sphere* mySphere = new osg::Sphere(osg::Vec3(0.0f, 0.0f, 0.0f), 1.5f); sd->setShape(mySphere); sd->setColor(red); MaGeode->addDrawable(sd); //code to load and apply basic shader osg::StateSet* rootState = rootNode->getOrCreateStateSet(); osg::ref_ptr<osg::Program> defaultProgramObject = new osg::Program; //Read and attach the FRAGMENT shader osg::Shader* shaderFrag = osgDB::readShaderFile(osg::Shader::FRAGMENT, "C:\\hadrien\\point.frag"); if (shaderFrag == NULL) { osg::notify(osg::NOTICE) << "Effect(frag) Not Supported !" << std::endl; return -1; } defaultProgramObject->addShader(shaderFrag); //Read and attach the VERTEX shader osg::Shader* shaderVert = osgDB::readShaderFile(osg::Shader::VERTEX, "C:\\hadrien\\vertshader.vert"); if (shaderVert == NULL) { osg::notify(osg::NOTICE) << "Effect(vert) Not Supported !" << std::endl; return -1; } defaultProgramObject->addShader(shaderVert); //rootState->addUniform( new osg::Uniform( "x", 50 )); //rootState->addUniform( new osg::Uniform( "y", 50 )); //widgetState->addUniform(new osg::Uniform("drawWidth", 1)); //widgetState->addUniform(new osg::Uniform("drawColor", osg::Vec4(255,0,0,255))); rootState->setAttributeAndModes(defaultProgramObject, osg::StateAttribute::ON); viewer.setSceneData(rootNode); viewer.run(); return (0); } vertshader.vert file: Code: void main ( ) { glPosition=glProjectionMatrix*glModelViewMatrix*glVertex ; } point.frag file: Code: #version 110 uniform vec4 drawColor; uniform int drawWidth; uniform int x; uniform int y; void main(void) { gl_FragColor = gl_Color; gl_FragColor.w = 1.0; if (x >= int(gl_FragCoord.x)-drawWidth && x <= int(gl_FragCoord.x)+drawWidth && y >= int(gl_FragCoord.y)-drawWidth && y <= int(gl_FragCoord.y)+drawWidth) { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); } } Is there something missing? ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=15766#15766 _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org