openscenegraph
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,
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
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 COMPARE_StateAttribute_Parameter(parameter)
Definition StateAttribute:69
#define COMPARE_StateAttribute_Types(TYPE, rhs_attribute)
Definition StateAttribute:57
#define GL_NORMAL_MAP_ARB
Definition TexGen:31
#define GL_REFLECTION_MAP_ARB
Definition TexGen:35
Definition CopyOp:41
Definition Matrixd:27
A plane class. It can be used to represent an infinite plane.
Definition Plane:34
Definition StateAttribute:77
Definition State:80
Definition TexGen:43
virtual ~TexGen(void)
Plane & getPlane(Coord which)
virtual int compare(const StateAttribute &sa) const
Definition TexGen:62
void setMode(Mode mode)
Definition TexGen:108
Plane _plane_q
Definition TexGen:136
Coord
Definition TexGen:112
@ R
Definition TexGen:113
Mode _mode
Definition TexGen:132
Mode
Definition TexGen:100
META_StateAttribute(osg, TexGen, TEXGEN)
virtual bool getModeUsage(StateAttribute::ModeUsage &usage) const
Definition TexGen:78
TexGen(const TexGen &texgen, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition TexGen:49
virtual bool isTextureAttribute() const
Definition TexGen:59
void setPlanesFromMatrix(const Matrixd &matrix)
Mode getMode() const
Definition TexGen:110
const Plane & getPlane(Coord which) const
virtual void apply(State &state) const
void setPlane(Coord which, const Plane &plane)
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
#define OSG_EXPORT
Definition osg/Export:39
Definition StateAttribute:308
virtual void usesTextureMode(GLMode mode)=0