OpenSceneGraph 3.6.5
TexGen
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_GLES3_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
38namespace osg {
39
43{
44 public :
45
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
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,
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
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
137
138};
139
140}
141
142#endif
#define GL_NORMAL_MAP_ARB
Definition TexGen:31
#define GL_REFLECTION_MAP_ARB
Definition TexGen:35
#define COMPARE_StateAttribute_Parameter(parameter)
COMPARE_StateAttribute_Parameter macro is a helper for implementing the StatateAtribute::compare(....
Definition StateAttribute:69
#define COMPARE_StateAttribute_Types(TYPE, rhs_attribute)
COMPARE_StateAttribute_Types macro is a helper for implementing the StateAtribute::compare(....
Definition StateAttribute:57
The core osg library provides the basic scene graph classes such as Nodes, State and Drawables,...
Definition AlphaFunc:19
Copy Op(erator) used to control whether shallow or deep copy is used during copy construction and clo...
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
Definition Matrixd:27
A plane class.
Definition Plane:34
Encapsulates the current applied OpenGL modes, attributes and vertex arrays settings,...
Definition State:80
@ TEXGEN
Definition StateAttribute:146
Definition StateAttribute:308
virtual void usesTextureMode(GLMode mode)=0
virtual ~TexGen(void)
Plane & getPlane(Coord which)
virtual int compare(const StateAttribute &sa) const
Return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs.
Definition TexGen:62
void setMode(Mode mode)
Definition TexGen:108
Plane _plane_q
Definition TexGen:136
Coord
Definition TexGen:112
@ S
Definition TexGen:113
@ T
Definition TexGen:113
@ Q
Definition TexGen:113
@ R
Definition TexGen:113
Plane _plane_s
Additional texgen coefficients for GL_OBJECT_PLANE or GL_EYE_PLANE,.
Definition TexGen:136
Mode _mode
Definition TexGen:132
Mode
Definition TexGen:100
@ NORMAL_MAP
Definition TexGen:104
@ EYE_LINEAR
Definition TexGen:102
@ REFLECTION_MAP
Definition TexGen:105
@ SPHERE_MAP
Definition TexGen:103
@ OBJECT_LINEAR
Definition TexGen:101
META_StateAttribute(osg, TexGen, TEXGEN)
virtual bool getModeUsage(StateAttribute::ModeUsage &usage) const
Return the modes associated with this StateAttribute.
Definition TexGen:78
TexGen(const TexGen &texgen, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Copy constructor using CopyOp to manage deep vs shallow copy.
Definition TexGen:49
virtual bool isTextureAttribute() const
Return true if StateAttribute is a type which controls texturing and needs to be issued w....
Definition TexGen:59
void setPlanesFromMatrix(const Matrixd &matrix)
Set the tex gen planes from specified matrix.
Mode getMode() const
Definition TexGen:110
const Plane & getPlane(Coord which) const
Plane _plane_r
Definition TexGen:136
Plane _plane_t
Definition TexGen:136
virtual void apply(State &state) const
apply the OpenGL state attributes.
void setPlane(Coord which, const Plane &plane)
#define OSG_EXPORT
Definition Export:39

osg logo
Generated at Sun Jul 20 2025 00:00:00 for the OpenSceneGraph by doxygen 1.14.0.