OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TexGen.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_TEXGEN
15 #define OSG_TEXGEN 1
16 
17 #include <osg/Plane>
18 #include <osg/StateAttribute>
19 
20 #if defined(OSG_GLES1_AVAILABLE) || defined(OSG_GLES2_AVAILABLE) || defined(OSG_GL3_AVAILABLE)
21  #define GL_OBJECT_LINEAR 0x2401
22  #define GL_EYE_LINEAR 0x2400
23  #define GL_SPHERE_MAP 0x2402
24  #define GL_TEXTURE_GEN_S 0x0C60
25  #define GL_TEXTURE_GEN_T 0x0C61
26  #define GL_TEXTURE_GEN_R 0x0C62
27  #define GL_TEXTURE_GEN_Q 0x0C63
28 #endif
29 
30 #ifndef GL_NORMAL_MAP_ARB
31  #define GL_NORMAL_MAP_ARB 0x8511
32 #endif
33 
34 #ifndef GL_REFLECTION_MAP_ARB
35  #define GL_REFLECTION_MAP_ARB 0x8512
36 #endif
37 
38 namespace osg {
39 
43 {
44  public :
45 
46  TexGen();
47 
49  TexGen(const TexGen& texgen,const CopyOp& copyop=CopyOp::SHALLOW_COPY):
50  StateAttribute(texgen,copyop),
51  _mode(texgen._mode),
52  _plane_s(texgen._plane_s),
53  _plane_t(texgen._plane_t),
54  _plane_r(texgen._plane_r),
55  _plane_q(texgen._plane_q) {}
56 
57  META_StateAttribute(osg, TexGen, TEXGEN);
58 
59  virtual bool isTextureAttribute() const { return true; }
60 
62  virtual int compare(const StateAttribute& sa) const
63  {
64  // Check for equal types, then create the rhs variable
65  // used by the COMPARE_StateAttribute_Parameter macros below.
67 
68  // Compare each parameter in turn against the rhs.
74 
75  return 0; // Passed all the above comparison macros, so must be equal.
76  }
77 
78  virtual bool getModeUsage(StateAttribute::ModeUsage& usage) const
79  {
80  usage.usesTextureMode(GL_TEXTURE_GEN_S);
81  usage.usesTextureMode(GL_TEXTURE_GEN_T);
82 
83  // Not happy with turning all tex gen parameters on
84  // as the OSG currently only supports 2D textures and therefore
85  // only S and T will be required, R&Q would be redundant...
86  // So commenting out the following until OSG supports 3D textures.
87  // I plan to revamp the OpenGL state management later so will
88  // tidy up then. Robert Osfield. Jan 2001.
89 
90  // The tidy up is now happening, but will have a think before
91  // resolving the below parameters.
92 
93  usage.usesTextureMode(GL_TEXTURE_GEN_R);
94  usage.usesTextureMode(GL_TEXTURE_GEN_Q);
95  return true;
96  }
97 
98  virtual void apply(State& state) const;
99 
100  enum Mode {
101  OBJECT_LINEAR = GL_OBJECT_LINEAR,
102  EYE_LINEAR = GL_EYE_LINEAR,
103  SPHERE_MAP = GL_SPHERE_MAP,
104  NORMAL_MAP = GL_NORMAL_MAP_ARB,
105  REFLECTION_MAP = GL_REFLECTION_MAP_ARB
106  };
107 
108  inline void setMode( Mode mode ) { _mode = mode; }
109 
110  Mode getMode() const { return _mode; }
111 
112  enum Coord {
113  S, T, R, Q
114  };
115 
116  void setPlane(Coord which, const Plane& plane);
117 
118  Plane& getPlane(Coord which);
119 
120  const Plane& getPlane(Coord which) const;
121 
126  void setPlanesFromMatrix(const Matrixd& matrix);
127 
128  protected :
129 
130  virtual ~TexGen( void );
131 
133 
136  Plane _plane_s, _plane_t, _plane_r, _plane_q;
137 
138 };
139 
140 }
141 
142 #endif
#define OSG_EXPORT
Definition: Export.h:43
#define COMPARE_StateAttribute_Types(TYPE, rhs_attribute)
TexGen(const TexGen &texgen, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition: TexGen.h:49
#define GL_NORMAL_MAP_ARB
Definition: TexGen.h:31
virtual int compare(const StateAttribute &sa) const
Definition: TexGen.h:62
virtual bool isTextureAttribute() const
Definition: TexGen.h:59
virtual bool getModeUsage(StateAttribute::ModeUsage &usage) const
Definition: TexGen.h:78
virtual void usesTextureMode(GLMode mode)=0
Mode _mode
Definition: TexGen.h:132
Mode getMode() const
Definition: TexGen.h:110
#define META_StateAttribute(library, name, type)
void setMode(Mode mode)
Definition: TexGen.h:108
A plane class. It can be used to represent an infinite plane.
Definition: Plane.h:33
Definition: AlphaFunc.h:19
#define COMPARE_StateAttribute_Parameter(parameter)
Plane _plane_t
Definition: TexGen.h:136
#define GL_REFLECTION_MAP_ARB
Definition: TexGen.h:35