From Fredric Mammond, added new osg::BlendEquation state attribute wrapping

up glBlendEquation.
This commit is contained in:
Robert Osfield
2005-01-03 16:39:28 +00:00
parent 4955343c76
commit fab7c4d715
6 changed files with 146 additions and 0 deletions

View File

@@ -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\

View File

@@ -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

99
include/osg/BlendEquation Normal file
View File

@@ -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 <osg/StateAttribute>
#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

View File

@@ -141,6 +141,7 @@ class SG_EXPORT StateAttribute : public Object
TEXMAT,
LIGHTMODEL,
BLENDFUNC,
BLENDEQUATION,
LOGICOP,
STENCIL,
COLORMASK,

35
src/osg/BlendEquation.cpp Normal file
View File

@@ -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 <osg/BlendEquation>
using namespace osg;
BlendEquation::BlendEquation():
_equation(FUNC_ADD_EXT)
{
}
BlendEquation::BlendEquation(GLenum equation):
_equation(equation)
{
}
BlendEquation::~BlendEquation()
{
}
void BlendEquation::apply(State&) const
{
glBlendEquation(_equation);
}

View File

@@ -13,6 +13,7 @@ CXXFILES =\
BoundingSphere.cpp\
BlendColor.cpp\
BlendFunc.cpp\
BlendEquation.cpp\
ClipNode.cpp\
ClipPlane.cpp\
ColorMask.cpp\