FragmentProgram
Go to the documentation of this file.
/* -*-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_FRAGMENTPROGRAM
#define OSG_FRAGMENTPROGRAM 1
#include <osg/StateAttribute>
#include <osg/Vec4>
#include <osg/Matrix>
#include <osg/buffered_value>
#include <map>
#include <string>
// if not defined by gl.h use the definition found in:
// http://oss.sgi.com/projects/ogl-sample/registry/ARB/fragment_program.txt
#ifndef GL_ARB_fragment_program
#define GL_FRAGMENT_PROGRAM_ARB 0x8804
#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
#define GL_PROGRAM_LENGTH_ARB 0x8627
#define GL_PROGRAM_FORMAT_ARB 0x8876
#define GL_PROGRAM_BINDING_ARB 0x8677
#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
#define GL_PROGRAM_PARAMETERS_ARB 0x88A8
#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
#define GL_PROGRAM_ATTRIBS_ARB 0x88AC
#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
#define GL_PROGRAM_STRING_ARB 0x8628
#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
#define GL_CURRENT_MATRIX_ARB 0x8641
#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
#define GL_MATRIX0_ARB 0x88C0
#define GL_MATRIX1_ARB 0x88C1
#define GL_MATRIX2_ARB 0x88C2
#define GL_MATRIX3_ARB 0x88C3
#define GL_MATRIX4_ARB 0x88C4
#define GL_MATRIX5_ARB 0x88C5
#define GL_MATRIX6_ARB 0x88C6
#define GL_MATRIX7_ARB 0x88C7
#define GL_MATRIX8_ARB 0x88C8
#define GL_MATRIX9_ARB 0x88C9
#define GL_MATRIX10_ARB 0x88CA
#define GL_MATRIX11_ARB 0x88CB
#define GL_MATRIX12_ARB 0x88CC
#define GL_MATRIX13_ARB 0x88CD
#define GL_MATRIX14_ARB 0x88CE
#define GL_MATRIX15_ARB 0x88CF
#define GL_MATRIX16_ARB 0x88D0
#define GL_MATRIX17_ARB 0x88D1
#define GL_MATRIX18_ARB 0x88D2
#define GL_MATRIX19_ARB 0x88D3
#define GL_MATRIX20_ARB 0x88D4
#define GL_MATRIX21_ARB 0x88D5
#define GL_MATRIX22_ARB 0x88D6
#define GL_MATRIX23_ARB 0x88D7
#define GL_MATRIX24_ARB 0x88D8
#define GL_MATRIX25_ARB 0x88D9
#define GL_MATRIX26_ARB 0x88DA
#define GL_MATRIX27_ARB 0x88DB
#define GL_MATRIX28_ARB 0x88DC
#define GL_MATRIX29_ARB 0x88DD
#define GL_MATRIX30_ARB 0x88DE
#define GL_MATRIX31_ARB 0x88DF
#endif
namespace osg {
class OSG_EXPORT FragmentProgram : public StateAttribute
{
public:
FragmentProgram();
FragmentProgram(const FragmentProgram& vp,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
META_StateAttribute(osg, FragmentProgram, FRAGMENTPROGRAM);
virtual int compare(const osg::StateAttribute& sa) const
{
// check the types are equal and then create the rhs variable
// used by the COMPARE_StateAttribute_Parameter macros below.
COMPARE_StateAttribute_Types(FragmentProgram,sa)
// compare each parameter in turn against the rhs.
COMPARE_StateAttribute_Parameter(_fragmentProgram)
return 0; // passed all the above comparison macros, must be equal.
}
virtual bool getModeUsage(StateAttribute::ModeUsage& usage) const
{
usage.usesMode(GL_FRAGMENT_PROGRAM_ARB);
return true;
}
// data access methods.
inline GLuint& getFragmentProgramID(unsigned int contextID) const
{
return _fragmentProgramIDList[contextID];
}
inline void setFragmentProgram( const char* program )
{
_fragmentProgram = program;
dirtyFragmentProgramObject();
}
inline void setFragmentProgram( const std::string& program )
{
_fragmentProgram = program;
dirtyFragmentProgramObject();
}
inline const std::string& getFragmentProgram() const { return _fragmentProgram; }
inline void setProgramLocalParameter(const GLuint index, const Vec4& p)
{
_programLocalParameters[index] = p;
}
typedef std::map<GLuint,Vec4> LocalParamList;
inline void setLocalParameters(const LocalParamList& lpl) { _programLocalParameters = lpl; }
inline LocalParamList& getLocalParameters() { return _programLocalParameters; }
inline const LocalParamList& getLocalParameters() const { return _programLocalParameters; }
inline void setMatrix(const GLenum mode, const Matrix& matrix)
{
_matrixList[mode] = matrix;
}
typedef std::map<GLenum,Matrix> MatrixList;
inline void setMatrices(const MatrixList& matrices) { _matrixList = matrices; }
inline MatrixList& getMatrices() { return _matrixList; }
inline const MatrixList& getMatrices() const { return _matrixList; }
void dirtyFragmentProgramObject();
virtual void apply(State& state) const;
virtual void compileGLObjects(State& state) const { apply(state); }
virtual void resizeGLObjectBuffers(unsigned int maxSize);
virtual void releaseGLObjects(State* state=0) const;
protected:
virtual ~FragmentProgram();
typedef buffered_value<GLuint> FragmentProgramIDList;
mutable FragmentProgramIDList _fragmentProgramIDList;
std::string _fragmentProgram;
LocalParamList _programLocalParameters;
MatrixList _matrixList;
};
}
#endif
GL_FRAGMENT_PROGRAM_ARB
#define GL_FRAGMENT_PROGRAM_ARB
Definition FragmentProgram:28
Matrix
StateAttribute
COMPARE_StateAttribute_Parameter
#define COMPARE_StateAttribute_Parameter(parameter)
Definition StateAttribute:69
COMPARE_StateAttribute_Types
#define COMPARE_StateAttribute_Types(TYPE, rhs_attribute)
Definition StateAttribute:57
Vec4
buffered_value
osg::CopyOp
Definition CopyOp:41
osg::CopyOp::SHALLOW_COPY
@ SHALLOW_COPY
Definition CopyOp:47
osg::FragmentProgram::setLocalParameters
void setLocalParameters(const LocalParamList &lpl)
Definition FragmentProgram:180
osg::FragmentProgram::getFragmentProgramID
GLuint & getFragmentProgramID(unsigned int contextID) const
Definition FragmentProgram:148
osg::FragmentProgram::_matrixList
MatrixList _matrixList
Definition FragmentProgram:231
osg::FragmentProgram::getMatrices
const MatrixList & getMatrices() const
Definition FragmentProgram:203
osg::FragmentProgram::getFragmentProgram
const std::string & getFragmentProgram() const
Definition FragmentProgram:169
osg::FragmentProgram::setFragmentProgram
void setFragmentProgram(const std::string &program)
Definition FragmentProgram:162
osg::FragmentProgram::_programLocalParameters
LocalParamList _programLocalParameters
Definition FragmentProgram:230
osg::FragmentProgram::setFragmentProgram
void setFragmentProgram(const char *program)
Definition FragmentProgram:155
osg::FragmentProgram::_fragmentProgram
std::string _fragmentProgram
Definition FragmentProgram:228
osg::FragmentProgram::compileGLObjects
virtual void compileGLObjects(State &state) const
Definition FragmentProgram:210
osg::FragmentProgram::FragmentProgramIDList
buffered_value< GLuint > FragmentProgramIDList
Definition FragmentProgram:225
osg::FragmentProgram::getMatrices
MatrixList & getMatrices()
Definition FragmentProgram:200
osg::FragmentProgram::setMatrices
void setMatrices(const MatrixList &matrices)
Definition FragmentProgram:197
osg::FragmentProgram::FragmentProgram
FragmentProgram()
osg::FragmentProgram::apply
virtual void apply(State &state) const
osg::FragmentProgram::_fragmentProgramIDList
FragmentProgramIDList _fragmentProgramIDList
Definition FragmentProgram:226
osg::FragmentProgram::FragmentProgram
FragmentProgram(const FragmentProgram &vp, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
osg::FragmentProgram::~FragmentProgram
virtual ~FragmentProgram()
osg::FragmentProgram::dirtyFragmentProgramObject
void dirtyFragmentProgramObject()
osg::FragmentProgram::resizeGLObjectBuffers
virtual void resizeGLObjectBuffers(unsigned int maxSize)
osg::FragmentProgram::setMatrix
void setMatrix(const GLenum mode, const Matrix &matrix)
Definition FragmentProgram:189
osg::FragmentProgram::releaseGLObjects
virtual void releaseGLObjects(State *state=0) const
osg::FragmentProgram::compare
virtual int compare(const osg::StateAttribute &sa) const
Definition FragmentProgram:127
osg::FragmentProgram::getModeUsage
virtual bool getModeUsage(StateAttribute::ModeUsage &usage) const
Definition FragmentProgram:139
osg::FragmentProgram::getLocalParameters
const LocalParamList & getLocalParameters() const
Definition FragmentProgram:186
osg::FragmentProgram::META_StateAttribute
META_StateAttribute(osg, FragmentProgram, FRAGMENTPROGRAM)
osg::FragmentProgram::MatrixList
std::map< GLenum, Matrix > MatrixList
Definition FragmentProgram:194
osg::FragmentProgram::getLocalParameters
LocalParamList & getLocalParameters()
Definition FragmentProgram:183
osg::FragmentProgram::setProgramLocalParameter
void setProgramLocalParameter(const GLuint index, const Vec4 &p)
Definition FragmentProgram:172
osg::FragmentProgram::LocalParamList
std::map< GLuint, Vec4 > LocalParamList
Definition FragmentProgram:177
osg::StateAttribute
Definition StateAttribute:77
osg::StateAttribute::StateAttribute
StateAttribute()
osg::StateAttribute::FRAGMENTPROGRAM
@ FRAGMENTPROGRAM
Definition StateAttribute:162
osg::State
Definition State:80
osg::buffered_value
Definition buffered_value:27
osg
Definition AlphaFunc:19
osg::Matrix
Matrixd Matrix
Definition Matrix:27
osg::Vec4
Vec4f Vec4
Definition Vec4:21
OSG_EXPORT
#define OSG_EXPORT
Definition osg/Export:39
osg::StateAttribute::ModeUsage
Definition StateAttribute:308
osg::StateAttribute::ModeUsage::usesMode
virtual void usesMode(GLMode mode)=0