From e0592b6d116fdfe4c0142ff6467ec44a3fce831a Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 20 Mar 2017 10:31:58 +0000 Subject: [PATCH] Added shader for GL3/GLES/GL2/GL2 --- src/osgViewer/StatsHandler.cpp | 72 ++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/src/osgViewer/StatsHandler.cpp b/src/osgViewer/StatsHandler.cpp index 9d647dce8..f426b5cc8 100644 --- a/src/osgViewer/StatsHandler.cpp +++ b/src/osgViewer/StatsHandler.cpp @@ -28,6 +28,55 @@ namespace osgViewer { +#define FIXED_FUNCTION defined(OSG_GL_FIXED_FUNCTION_AVAILABLE) +#define SHADERS_GL3 (defined(OSG_GL3_AVAILABLE) || defined(OSG_GLES3_AVAILABLE)) +#define SHADERS_GL2 !FIXED_FUNCTION && !SHADERS_GL3 + +#if SHADERS_GL3 +static const char* gl3_StatsVertexShader = { + "#version 330 core\n" + "in vec4 osg_Vertex;\n" + "in vec4 osg_Color;\n" + "uniform mat4 osg_ModelViewProjectionMatrix;\n" + "out vec4 vertexColor;\n" + "void main(void)\n" + "{\n" + " gl_Position = osg_ModelViewProjectionMatrix * osg_Vertex;\n" + " vertexColor = osg_Color; \n" + "}\n" +}; + +static const char* gl3_StatsFragmentShader = { + "#version 330 core\n" + "in vec4 vertexColor;\n" + "out vec4 color;\n" + "void main(void)\n" + "{\n" + " gl_FragColor = vertexColor;\n" + "}\n" +}; + +#endif + + +#if SHADERS_GL2 +static const char* gl2_StatsVertexShader = { + "varying vec4 vertexColor;\n" + "void main(void)\n" + "{\n" + " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" + " vertexColor = gl_Color;\n" + "}\n" +}; + +static const char* gl2_StatsFragmentShader = { + "varying vec4 vertexColor;\n" + "void main(void)\n" + "{\n" + " gl_FragColor = vertexColor;\n" + "}\n" +}; +#endif StatsHandler::StatsHandler(): _keyEventTogglesOnScreenStats('s'), @@ -49,10 +98,33 @@ StatsHandler::StatsHandler(): _characterSize(20.0f), _lineHeight(1.5f) { + OSG_NOTICE<<"StatsHandler::StatsHandler()"<getOrCreateStateSet()->setGlobalDefaults(); _camera->setRenderer(new Renderer(_camera.get())); _camera->setProjectionResizePolicy(osg::Camera::FIXED); + +#if SHADERS_GL3 + + OSG_INFO<<"StatsHandler::StatsHandler() Setting up GL3 compatible shaders"< program = new osg::Program; + program->addShader(new osg::Shader(osg::Shader::VERTEX, gl3_StatsVertexShader)); + program->addShader(new osg::Shader(osg::Shader::FRAGMENT, gl3_StatsFragmentShader)); + _camera->getOrCreateStateSet()->setAttributeAndModes(program.get()); + +#elif SHADERS_GL2 + + OSG_INFO<<"StatsHandler::StatsHandler() Setting up GL2 compatible shaders"< program = new osg::Program; + program->addShader(new osg::Shader(osg::Shader::VERTEX, gl2_StatsVertexShader)); + program->addShader(new osg::Shader(osg::Shader::FRAGMENT, gl2_StatsFragmentShader)); + _camera->getOrCreateStateSet()->setAttributeAndModes(program.get()); +#else + OSG_INFO<<"StatsHandler::StatsHandler() Fixed pipeline"<