From 448efe07228fd772603771907c0f489b512122da Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 4 Jun 2007 10:47:15 +0000 Subject: [PATCH] Added osg::Hint class --- include/osg/Hint | 76 ++++++++++++++++++++++++++++++++++++++ include/osg/StateAttribute | 4 +- src/osg/CMakeLists.txt | 2 + src/osg/Hint.cpp | 23 ++++++++++++ 4 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 include/osg/Hint create mode 100644 src/osg/Hint.cpp diff --git a/include/osg/Hint b/include/osg/Hint new file mode 100644 index 000000000..3c236df94 --- /dev/null +++ b/include/osg/Hint @@ -0,0 +1,76 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield + * + * This library is open source and may be redistributed and/or modified under + * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or + * (at your option) any later version. The full license is in LICENSE file + * included with this distribution, and on the openscenegraph.org website. + * + * This library 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. See the + * OpenSceneGraph Public License for more details. +*/ + +#ifndef OSG_HINT +#define OSG_HINT 1 + +#include + +namespace osg +{ + +class OSG_EXPORT Hint : public StateAttribute +{ +public: + + Hint(): + _target(GL_NONE), + _mode(GL_NONE) {} + + Hint(GLenum target, GLenum mode): + _target(target), + _mode(mode) {} + + /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ + Hint(const Hint& hint,const CopyOp& copyop=CopyOp::SHALLOW_COPY): + StateAttribute(hint,copyop), + _target(hint._target), + _mode(hint._mode) {} + + META_StateAttribute(osg, Hint, HINT); + + virtual int compare(const StateAttribute& sa) const + { + // check the types are equal and then create the rhs variable + // used by the COMPARE_StateAttribute_Parameter macro's below. + COMPARE_StateAttribute_Types(Hint,sa) + + // compare each paramter in turn against the rhs. + COMPARE_StateAttribute_Parameter(_target) + COMPARE_StateAttribute_Parameter(_mode) + + return 0; + } + + /** Return the member identifier within the attribute's class type. Used for light number/clip plane number etc.*/ + virtual unsigned int getMember() const { return static_cast(_target); } + + inline void setTarget(GLenum target) { _target = target; } + inline GLenum getTarget() const { return _target; } + + inline void setMode(GLenum mode) { _mode = mode; } + inline GLenum getMode() const { return _mode; } + + virtual void apply(State& state) const; + +protected: + + + GLenum _target; + GLenum _mode; +}; + + +} + +#endif diff --git a/include/osg/StateAttribute b/include/osg/StateAttribute index daa9e424c..a6bd34217 100644 --- a/include/osg/StateAttribute +++ b/include/osg/StateAttribute @@ -159,6 +159,7 @@ class OSG_EXPORT StateAttribute : public Object POINTSPRITE, PROGRAM, CLAMPCOLOR, + HINT, /// osgFX namespace VALIDATOR, @@ -179,7 +180,8 @@ class OSG_EXPORT StateAttribute : public Object OSGNVSLANG_PROGRAM, // osgNVParse - OSGNVPARSE_PROGRAM_PARSER + OSGNVPARSE_PROGRAM_PARSER, + }; diff --git a/src/osg/CMakeLists.txt b/src/osg/CMakeLists.txt index 44be3c3f8..c81192aba 100644 --- a/src/osg/CMakeLists.txt +++ b/src/osg/CMakeLists.txt @@ -65,6 +65,7 @@ SET(LIB_PUBLIC_HEADERS ${HEADER_PATH}/GraphicsContext ${HEADER_PATH}/GraphicsThread ${HEADER_PATH}/Group + ${HEADER_PATH}/Hint ${HEADER_PATH}/Image ${HEADER_PATH}/ImageStream ${HEADER_PATH}/LOD @@ -215,6 +216,7 @@ ADD_LIBRARY(${LIB_NAME} GraphicsContext.cpp GraphicsThread.cpp Group.cpp + Hint.cpp Image.cpp ImageStream.cpp LOD.cpp diff --git a/src/osg/Hint.cpp b/src/osg/Hint.cpp new file mode 100644 index 000000000..043c8356e --- /dev/null +++ b/src/osg/Hint.cpp @@ -0,0 +1,23 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield + * + * This library is open source and may be redistributed and/or modified under + * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or + * (at your option) any later version. The full license is in LICENSE file + * included with this distribution, and on the openscenegraph.org website. + * + * This library 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. See the + * OpenSceneGraph Public License for more details. +*/ + +#include + +using namespace osg; + +void Hint::apply(State& state) const +{ + if (_target==GL_NONE || _mode==GL_NONE) return; + + glHint(_target, _mode); +}