diff --git a/Make/makedirdefs b/Make/makedirdefs index 9123924a7..46cc4c861 100644 --- a/Make/makedirdefs +++ b/Make/makedirdefs @@ -146,6 +146,7 @@ EXAMPLE_DIRS = \ osgarchive\ osgautotransform\ osgbillboard\ + osgblendequation\ osgcallback\ osgcameragroup\ osgclip\ @@ -169,6 +170,7 @@ EXAMPLE_DIRS = \ osglight\ osglightpoint\ osglogo\ + osglogicop\ osgmovie\ osgmotionblur\ osgmultitexture\ diff --git a/VisualStudio/osg/osg.dsp b/VisualStudio/osg/osg.dsp index fd5f727b8..eec7c2e57 100755 --- a/VisualStudio/osg/osg.dsp +++ b/VisualStudio/osg/osg.dsp @@ -128,6 +128,10 @@ SOURCE=..\..\src\osg\BlendColor.cpp # End Source File # Begin Source File +SOURCE=..\..\src\osg\BlendEquation.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\osg\BlendFunc.cpp # End Source File # Begin Source File @@ -532,6 +536,10 @@ SOURCE=..\..\Include\Osg\BlendColor # End Source File # Begin Source File +SOURCE=..\..\Include\Osg\BlendEquation +# End Source File +# Begin Source File + SOURCE=..\..\Include\Osg\BlendFunc # End Source File # Begin Source File diff --git a/include/osg/BlendEquation b/include/osg/BlendEquation new file mode 100644 index 000000000..bead41515 --- /dev/null +++ b/include/osg/BlendEquation @@ -0,0 +1,99 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 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_BLENDEQUATION +#define OSG_BLENDEQUATION 1 + +#include + +#ifndef GL_VERSION_1_2 +/* Logic Ops */ +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#define GL_LOGIC_OP 0x0BF1 +#endif + + + +namespace osg { + +/** Encapsulates OpenGL BlendEquation state. */ +class SG_EXPORT BlendEquation : public StateAttribute +{ + public : + + BlendEquation(); + + BlendEquation(GLenum equation); + + /** Copy constructor using CopyOp to manage deep vs shallow copy. */ + BlendEquation(const BlendEquation& trans,const CopyOp& copyop=CopyOp::SHALLOW_COPY): + StateAttribute(trans,copyop), + _equation(trans._equation){} + + META_StateAttribute(osg, BlendEquation,BLENDEQUATION); + + /** Return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs. */ + virtual int compare(const StateAttribute& sa) const + { + // Check for equal types, then create the rhs variable + // used by the COMPARE_StateAttribute_Paramter macros below. + COMPARE_StateAttribute_Types(BlendEquation,sa) + + // Compare each parameter in turn against the rhs. + COMPARE_StateAttribute_Parameter(_equation) + + return 0; // Passed all the above comparison macros, so must be equal. + } + + virtual bool getModeUsage(ModeUsage& usage) const + { + usage.usesMode(GL_BLEND); + return true; + } + + enum BlendEquationEquation { + MIN_EXT = GL_MIN_EXT, + MAX_EXT = GL_MAX_EXT, + ALPHA_MIN_SGIX = GL_ALPHA_MIN_SGIX, + ALPHA_MAX_SGIX = GL_ALPHA_MAX_SGIX, + LOGIC_OP = GL_LOGIC_OP, + FUNC_ADD_EXT = GL_FUNC_ADD_EXT, + FUNC_SUBTRACT_EXT = GL_FUNC_SUBTRACT_EXT, + FUNC_REVERSE_SUBTRACT_EXT = GL_FUNC_REVERSE_SUBTRACT_EXT + }; + + inline void setEquation( GLenum equation ) + { + _equation = equation; + } + + inline GLenum getEquation() const { return _equation; } + + virtual void apply(State& state) const; + + protected : + + virtual ~BlendEquation(); + + GLenum _equation; +}; + +} + +#endif diff --git a/include/osg/StateAttribute b/include/osg/StateAttribute index 9681cf06b..70540d9d8 100644 --- a/include/osg/StateAttribute +++ b/include/osg/StateAttribute @@ -141,6 +141,7 @@ class SG_EXPORT StateAttribute : public Object TEXMAT, LIGHTMODEL, BLENDFUNC, + BLENDEQUATION, LOGICOP, STENCIL, COLORMASK, diff --git a/src/osg/BlendEquation.cpp b/src/osg/BlendEquation.cpp new file mode 100644 index 000000000..d3536cc6b --- /dev/null +++ b/src/osg/BlendEquation.cpp @@ -0,0 +1,35 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 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; + +BlendEquation::BlendEquation(): + _equation(FUNC_ADD_EXT) +{ +} + +BlendEquation::BlendEquation(GLenum equation): + _equation(equation) +{ +} + +BlendEquation::~BlendEquation() +{ +} + +void BlendEquation::apply(State&) const +{ + glBlendEquation(_equation); +} + diff --git a/src/osg/GNUmakefile b/src/osg/GNUmakefile index 1fc9e0e46..6b5bacc7f 100644 --- a/src/osg/GNUmakefile +++ b/src/osg/GNUmakefile @@ -13,6 +13,7 @@ CXXFILES =\ BoundingSphere.cpp\ BlendColor.cpp\ BlendFunc.cpp\ + BlendEquation.cpp\ ClipNode.cpp\ ClipPlane.cpp\ ColorMask.cpp\