diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 7b099dc80..79d8ca3e6 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -102,6 +102,7 @@ IF(DYNAMIC_OPENSCENEGRAPH) ADD_SUBDIRECTORY(osgscribe) ADD_SUBDIRECTORY(osgsequence) ADD_SUBDIRECTORY(osgshaders) + ADD_SUBDIRECTORY(osgshaderpipeline) ADD_SUBDIRECTORY(osgshadercomposition) ADD_SUBDIRECTORY(osgshadergen) ADD_SUBDIRECTORY(osgshadermultiviewport) diff --git a/examples/osgshaderpipeline/CMakeLists.txt b/examples/osgshaderpipeline/CMakeLists.txt new file mode 100644 index 000000000..59ebbaeb4 --- /dev/null +++ b/examples/osgshaderpipeline/CMakeLists.txt @@ -0,0 +1,3 @@ +SET(TARGET_SRC osgshaderpipeline.cpp ) + +SETUP_APPLICATION(osgshaderpipeline) diff --git a/examples/osgshaderpipeline/osgshaderpipeline.cpp b/examples/osgshaderpipeline/osgshaderpipeline.cpp new file mode 100644 index 000000000..23cabebf6 --- /dev/null +++ b/examples/osgshaderpipeline/osgshaderpipeline.cpp @@ -0,0 +1,122 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2010 Robert Osfield + * + * This application is open source and may be redistributed and/or modified + * freely and without restriction, both in commercial and non commercial applications, + * as long as this copyright notice is maintained. + * + * This application is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +#include + +#include + +#include +#include + +#include + + +int main(int argc, char** argv) +{ + // use an ArgumentParser object to manage the program arguments. + osg::ArgumentParser arguments(&argc,argv); + + osgViewer::Viewer viewer(arguments); + + // add the state manipulator + viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); + + // add the stats handler + viewer.addEventHandler(new osgViewer::StatsHandler); + + + osg::ref_ptr program = new osg::Program; + + + bool vertexShadersAssigned = false; + std::string vertexShaderFilename; + while(arguments.read("--vert", vertexShaderFilename)) + { + osg::ref_ptr vertexShader = osgDB::readRefShaderFile(vertexShaderFilename); + if (vertexShader) + { + vertexShadersAssigned = true; + program->addShader(vertexShader); + } + else + { + OSG_NOTICE<<"Unable to load vertex shader file : "< vertexShader = osgDB::readRefShaderFile(vertexShaderFilename); + if (vertexShader) + { + vertexShadersAssigned = true; + program->addShader(vertexShader); + } + else + { + OSG_NOTICE<<"Unable to load vertex shader file : "< fragmentShader = osgDB::readRefShaderFile(fragmentShaderFilename); + if (fragmentShader) + { + fragmentShadersAssigned = true; + program->addShader(fragmentShader); + } + else + { + OSG_NOTICE<<"Unable to load fragment shader file : "< fragmentShader = osgDB::readRefShaderFile(fragmentShaderFilename); + if (fragmentShader) + { + fragmentShadersAssigned = true; + program->addShader(fragmentShader); + } + else + { + OSG_NOTICE<<"Unable to load fragment shader file : "<getOrCreateStateSet()->setAttribute(program); + + // load the data + osg::ref_ptr loadedModel = osgDB::readRefNodeFiles(arguments); + if (!loadedModel) + { + std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl; + return 1; + } + + viewer.setSceneData(loadedModel); + + viewer.realize(); + + return viewer.run(); + +}