OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
VertexProgram.h
Go to the documentation of this file.
1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2  *
3  * This library is open source and may be redistributed and/or modified under
4  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5  * (at your option) any later version. The full license is in LICENSE file
6  * included with this distribution, and on the openscenegraph.org website.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * OpenSceneGraph Public License for more details.
12 */
13 
14 #ifndef OSG_VERTEXPROGRAM
15 #define OSG_VERTEXPROGRAM 1
16 
17 #include <osg/StateAttribute>
18 #include <osg/Vec4>
19 #include <osg/Matrix>
20 #include <osg/buffered_value>
21 
22 #include <map>
23 #include <string>
24 
25 // if not defined by gl.h use the definition found in:
26 // http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_program.txt
27 #ifndef GL_ARB_vertex_program
28 #define GL_VERTEX_PROGRAM_ARB 0x8620
29 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
30 #define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
31 #define GL_COLOR_SUM_ARB 0x8458
32 #define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
33 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
34 #define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
35 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
36 #define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
37 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
38 #define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
39 #define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
40 #define GL_PROGRAM_LENGTH_ARB 0x8627
41 #define GL_PROGRAM_FORMAT_ARB 0x8876
42 #define GL_PROGRAM_BINDING_ARB 0x8677
43 #define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
44 #define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
45 #define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
46 #define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
47 #define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
48 #define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
49 #define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
50 #define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
51 #define GL_PROGRAM_PARAMETERS_ARB 0x88A8
52 #define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
53 #define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
54 #define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
55 #define GL_PROGRAM_ATTRIBS_ARB 0x88AC
56 #define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
57 #define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
58 #define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
59 #define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
60 #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
61 #define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
62 #define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
63 #define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
64 #define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
65 #define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
66 #define GL_PROGRAM_STRING_ARB 0x8628
67 #define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
68 #define GL_CURRENT_MATRIX_ARB 0x8641
69 #define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
70 #define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
71 #define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
72 #define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
73 #define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
74 #define GL_PROGRAM_ERROR_STRING_ARB 0x8874
75 #define GL_MATRIX0_ARB 0x88C0
76 #define GL_MATRIX1_ARB 0x88C1
77 #define GL_MATRIX2_ARB 0x88C2
78 #define GL_MATRIX3_ARB 0x88C3
79 #define GL_MATRIX4_ARB 0x88C4
80 #define GL_MATRIX5_ARB 0x88C5
81 #define GL_MATRIX6_ARB 0x88C6
82 #define GL_MATRIX7_ARB 0x88C7
83 #define GL_MATRIX8_ARB 0x88C8
84 #define GL_MATRIX9_ARB 0x88C9
85 #define GL_MATRIX10_ARB 0x88CA
86 #define GL_MATRIX11_ARB 0x88CB
87 #define GL_MATRIX12_ARB 0x88CC
88 #define GL_MATRIX13_ARB 0x88CD
89 #define GL_MATRIX14_ARB 0x88CE
90 #define GL_MATRIX15_ARB 0x88CF
91 #define GL_MATRIX16_ARB 0x88D0
92 #define GL_MATRIX17_ARB 0x88D1
93 #define GL_MATRIX18_ARB 0x88D2
94 #define GL_MATRIX19_ARB 0x88D3
95 #define GL_MATRIX20_ARB 0x88D4
96 #define GL_MATRIX21_ARB 0x88D5
97 #define GL_MATRIX22_ARB 0x88D6
98 #define GL_MATRIX23_ARB 0x88D7
99 #define GL_MATRIX24_ARB 0x88D8
100 #define GL_MATRIX25_ARB 0x88D9
101 #define GL_MATRIX26_ARB 0x88DA
102 #define GL_MATRIX27_ARB 0x88DB
103 #define GL_MATRIX28_ARB 0x88DC
104 #define GL_MATRIX29_ARB 0x88DD
105 #define GL_MATRIX30_ARB 0x88DE
106 #define GL_MATRIX31_ARB 0x88DF
107 #endif
108 
109 
110 namespace osg {
111 
112 
113 
116 {
117  public:
118 
119  VertexProgram();
120 
122  VertexProgram(const VertexProgram& vp,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
123 
124  META_StateAttribute(osg, VertexProgram, VERTEXPROGRAM);
125 
127  virtual int compare(const osg::StateAttribute& sa) const
128  {
129  // check the types are equal and then create the rhs variable
130  // used by the COMPARE_StateAttribute_Parameter macros below.
132 
133  // compare each parameter in turn against the rhs.
134  COMPARE_StateAttribute_Parameter(_vertexProgram)
135 
136  return 0; // passed all the above comparison macros, must be equal.
137  }
138 
139  virtual bool getModeUsage(StateAttribute::ModeUsage& usage) const
140  {
142  return true;
143  }
144 
145  // data access methods.
146 
148  inline GLuint& getVertexProgramID(unsigned int contextID) const
149  {
150  return _vertexProgramIDList[contextID];
151  }
152 
153 
155  inline void setVertexProgram( const char* program )
156  {
157  _vertexProgram = program;
158  dirtyVertexProgramObject();
159  }
160 
162  inline void setVertexProgram( const std::string& program )
163  {
164  _vertexProgram = program;
165  dirtyVertexProgramObject();
166  }
167 
169  inline const std::string& getVertexProgram() const { return _vertexProgram; }
170 
172  inline void setProgramLocalParameter(const GLuint index, const Vec4& p)
173  {
174  _programLocalParameters[index] = p;
175  }
176 
177  typedef std::map<GLuint,Vec4> LocalParamList;
178 
180  inline void setLocalParameters(const LocalParamList& lpl) { _programLocalParameters = lpl; }
181 
183  inline LocalParamList& getLocalParameters() { return _programLocalParameters; }
184 
186  inline const LocalParamList& getLocalParameters() const { return _programLocalParameters; }
187 
189  inline void setMatrix(const GLenum mode, const Matrix& matrix)
190  {
191  _matrixList[mode] = matrix;
192  }
193 
194  typedef std::map<GLenum,Matrix> MatrixList;
195 
197  inline void setMatrices(const MatrixList& matrices) { _matrixList = matrices; }
198 
200  inline MatrixList& getMatrices() { return _matrixList; }
201 
203  inline const MatrixList& getMatrices() const { return _matrixList; }
204 
206  void dirtyVertexProgramObject();
207 
213  static void deleteVertexProgramObject(unsigned int contextID,GLuint handle);
214 
218  static void flushDeletedVertexProgramObjects(unsigned int contextID,double currentTime, double& availableTime);
219 
225  static void discardDeletedVertexProgramObjects(unsigned int contextID);
226 
227  virtual void apply(State& state) const;
228 
229  virtual void compileGLObjects(State& state) const { apply(state); }
230 
232  virtual void resizeGLObjectBuffers(unsigned int maxSize);
233 
238  virtual void releaseGLObjects(State* state=0) const;
239 
240  protected:
241 
242 
243  virtual ~VertexProgram();
244 
246  mutable VertexProgramIDList _vertexProgramIDList;
247 
248  std::string _vertexProgram;
249 
250  LocalParamList _programLocalParameters;
251 
252  MatrixList _matrixList;
253 };
254 
255 }
256 
257 #endif
258 
#define OSG_EXPORT
Definition: Export.h:43
#define COMPARE_StateAttribute_Types(TYPE, rhs_attribute)
const MatrixList & getMatrices() const
virtual bool getModeUsage(StateAttribute::ModeUsage &usage) const
std::map< GLuint, Vec4 > LocalParamList
std::string _vertexProgram
virtual void usesMode(GLMode mode)=0
LocalParamList & getLocalParameters()
void setMatrix(const GLenum mode, const Matrix &matrix)
void setProgramLocalParameter(const GLuint index, const Vec4 &p)
buffered_value< GLuint > VertexProgramIDList
virtual void compileGLObjects(State &state) const
#define META_StateAttribute(library, name, type)
LocalParamList _programLocalParameters
#define GL_VERTEX_PROGRAM_ARB
Definition: VertexProgram.h:28
virtual int compare(const osg::StateAttribute &sa) const
void setMatrices(const MatrixList &matrices)
MatrixList _matrixList
Definition: AlphaFunc.h:19
void setVertexProgram(const std::string &program)
#define COMPARE_StateAttribute_Parameter(parameter)
VertexProgramIDList _vertexProgramIDList
const std::string & getVertexProgram() const
void setLocalParameters(const LocalParamList &lpl)
GLuint & getVertexProgramID(unsigned int contextID) const
MatrixList & getMatrices()
void setVertexProgram(const char *program)
const LocalParamList & getLocalParameters() const
std::map< GLenum, Matrix > MatrixList