Panda3D
textureStage.h
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file textureStage.h
10 * @author drose
11 * @date 2004-07-14
12 */
13
14#ifndef TEXTURESTAGE_H
15#define TEXTURESTAGE_H
16
17#include "pandabase.h"
18
19#include "internalName.h"
20#include "pointerTo.h"
22#include "updateSeq.h"
23#include "luse.h"
25
26class FactoryParams;
27
28/**
29 * Defines the properties of a named stage of the multitexture pipeline. The
30 * TextureAttrib will associated a number of these stages with Texture
31 * objects, and the GSG will render geometry by sorting all of the currently
32 * active TextureStages in order and then issuing the appropriate rendering
33 * calls to activate them.
34 */
35class EXPCL_PANDA_GOBJ TextureStage : public TypedWritableReferenceCount {
36PUBLISHED:
37 explicit TextureStage(const std::string &name);
38 INLINE TextureStage(const TextureStage &copy);
39 void operator = (const TextureStage &copy);
40
41 virtual ~TextureStage();
42
43 enum Mode {
44 // Modes that pertain to the fixed-function pipeline.
45
46 M_modulate,
47 M_decal,
48 M_blend,
49 M_replace,
50 M_add,
51 M_combine,
52 M_blend_color_scale,
53
54 M_modulate_glow, // When fixed-function, equivalent to modulate.
55 M_modulate_gloss, // When fixed-function, equivalent to modulate.
56
57 // Modes that are only relevant to shader-based rendering.
58
59 M_normal,
60 M_normal_height,
61 M_glow, // Rarely used: modulate_glow is more efficient.
62 M_gloss, // Rarely used: modulate_gloss is more efficient.
63 M_height, // Rarely used: normal_height is more efficient.
64 M_selector,
65 M_normal_gloss,
66
67 M_emission,
68 };
69
70 enum CombineMode {
71 CM_undefined,
72 CM_replace,
73 CM_modulate,
74 CM_add,
75 CM_add_signed,
76 CM_interpolate,
77 CM_subtract,
78
79 // The following are valid only for combine_rgb, not combine_alpha.
80 CM_dot3_rgb,
81 CM_dot3_rgba,
82 };
83
84 enum CombineSource {
85 CS_undefined,
86 CS_texture,
87 CS_constant,
88 CS_primary_color,
89 CS_previous,
90 CS_constant_color_scale,
91 CS_last_saved_result,
92 };
93
94 enum CombineOperand {
95 CO_undefined,
96 CO_src_color,
97 CO_one_minus_src_color,
98 CO_src_alpha,
99 CO_one_minus_src_alpha,
100 };
101
102 INLINE void set_name(const std::string &name);
103 INLINE const std::string &get_name() const;
104
105 INLINE void set_sort(int sort);
106 INLINE int get_sort() const;
107
108 INLINE void set_priority(int priority);
109 INLINE int get_priority() const;
110
111 INLINE void set_texcoord_name(InternalName *name);
112 INLINE void set_texcoord_name(const std::string &texcoord_name);
113 INLINE InternalName *get_texcoord_name() const;
114 INLINE InternalName *get_tangent_name() const;
115 INLINE InternalName *get_binormal_name() const;
116
117 INLINE void set_mode(Mode mode);
118 INLINE Mode get_mode() const;
119
120 INLINE bool is_fixed_function() const;
121
122 INLINE void set_color(const LColor &color);
123 INLINE LColor get_color() const;
124
125 INLINE void set_rgb_scale(int rgb_scale);
126 INLINE int get_rgb_scale() const;
127
128 INLINE void set_alpha_scale(int alpha_scale);
129 INLINE int get_alpha_scale() const;
130
131 INLINE void set_saved_result(bool saved_result);
132 INLINE bool get_saved_result() const;
133
134 INLINE void set_tex_view_offset(int tex_view_offset);
135 INLINE int get_tex_view_offset() const;
136
137 INLINE void set_combine_rgb(CombineMode mode,
138 CombineSource source0, CombineOperand operand0);
139 INLINE void set_combine_rgb(CombineMode mode,
140 CombineSource source0, CombineOperand operand0,
141 CombineSource source1, CombineOperand operand1);
142 INLINE void set_combine_rgb(CombineMode mode,
143 CombineSource source0, CombineOperand operand0,
144 CombineSource source1, CombineOperand operand1,
145 CombineSource source2, CombineOperand operand2);
146 INLINE CombineMode get_combine_rgb_mode() const;
147 INLINE int get_num_combine_rgb_operands() const;
148 INLINE CombineSource get_combine_rgb_source0() const;
149 INLINE CombineOperand get_combine_rgb_operand0() const;
150 INLINE CombineSource get_combine_rgb_source1() const;
151 INLINE CombineOperand get_combine_rgb_operand1() const;
152 INLINE CombineSource get_combine_rgb_source2() const;
153 INLINE CombineOperand get_combine_rgb_operand2() const;
154
155 INLINE void set_combine_alpha(CombineMode mode,
156 CombineSource source0, CombineOperand operand0);
157 INLINE void set_combine_alpha(CombineMode mode,
158 CombineSource source0, CombineOperand operand0,
159 CombineSource source1, CombineOperand operand1);
160 INLINE void set_combine_alpha(CombineMode mode,
161 CombineSource source0, CombineOperand operand0,
162 CombineSource source1, CombineOperand operand1,
163 CombineSource source2, CombineOperand operand2);
164 INLINE CombineMode get_combine_alpha_mode() const;
165 INLINE int get_num_combine_alpha_operands() const;
166 INLINE CombineSource get_combine_alpha_source0() const;
167 INLINE CombineOperand get_combine_alpha_operand0() const;
168 INLINE CombineSource get_combine_alpha_source1() const;
169 INLINE CombineOperand get_combine_alpha_operand1() const;
170 INLINE CombineSource get_combine_alpha_source2() const;
171 INLINE CombineOperand get_combine_alpha_operand2() const;
172
173 INLINE bool involves_color_scale() const;
174 INLINE bool uses_color() const;
175 INLINE bool uses_primary_color() const;
176 INLINE bool uses_last_saved_result() const;
177
178 INLINE bool operator == (const TextureStage &other) const;
179 INLINE bool operator != (const TextureStage &other) const;
180 INLINE bool operator < (const TextureStage &other) const;
181
182 int compare_to(const TextureStage &other) const;
183
184 void write(std::ostream &out) const;
185 void output(std::ostream &out) const;
186
187 INLINE static TextureStage *get_default();
188
189PUBLISHED:
190 MAKE_PROPERTY(name, get_name, set_name);
191 MAKE_PROPERTY(sort, get_sort, set_sort);
192 MAKE_PROPERTY(priority, get_priority, set_priority);
193
194 MAKE_PROPERTY(texcoord_name, get_texcoord_name, set_texcoord_name);
195 MAKE_PROPERTY(tangent_name, get_tangent_name);
196 MAKE_PROPERTY(binormal_name, get_binormal_name);
197
198 MAKE_PROPERTY(mode, get_mode, set_mode);
199
200 MAKE_PROPERTY(color, get_color, set_color);
201 MAKE_PROPERTY(rgb_scale, get_rgb_scale, set_rgb_scale);
202 MAKE_PROPERTY(alpha_scale, get_alpha_scale, set_alpha_scale);
203 MAKE_PROPERTY(saved_result, get_saved_result, set_saved_result);
204
205 MAKE_PROPERTY(tex_view_offset, get_tex_view_offset, set_tex_view_offset);
206
207 MAKE_PROPERTY(default, get_default);
208
209public:
210 INLINE static UpdateSeq get_sort_seq();
211
212 INLINE void mark_used_by_auto_shader() const;
213
214private:
215 INLINE void update_color_flags();
216
217 static int get_expected_num_combine_operands(CombineMode cm);
218 static bool operand_valid_for_rgb(CombineOperand co);
219 static bool operand_valid_for_alpha(CombineOperand co);
220
221 std::string _name;
222 int _sort;
223 int _priority;
224 PT(InternalName) _texcoord_name;
225 Mode _mode;
226 LColor _color;
227 int _rgb_scale;
228 int _alpha_scale;
229 bool _saved_result;
230 int _tex_view_offset;
231 bool _involves_color_scale;
232 bool _uses_color;
233 bool _uses_primary_color;
234 bool _uses_last_saved_result;
235
236 CombineMode _combine_rgb_mode;
237 int _num_combine_rgb_operands;
238 CombineSource _combine_rgb_source0;
239 CombineOperand _combine_rgb_operand0;
240 CombineSource _combine_rgb_source1;
241 CombineOperand _combine_rgb_operand1;
242 CombineSource _combine_rgb_source2;
243 CombineOperand _combine_rgb_operand2;
244
245 CombineMode _combine_alpha_mode;
246 int _num_combine_alpha_operands;
247 CombineSource _combine_alpha_source0;
248 CombineOperand _combine_alpha_operand0;
249 CombineSource _combine_alpha_source1;
250 CombineOperand _combine_alpha_operand1;
251 CombineSource _combine_alpha_source2;
252 CombineOperand _combine_alpha_operand2;
253
254 static PT(TextureStage) _default_stage;
255 static UpdateSeq _sort_seq;
256
257 mutable bool _used_by_auto_shader;
258
259public:
260 // Datagram stuff
261 static void register_with_read_factory();
262 virtual void write_datagram(BamWriter *manager, Datagram &me);
263 virtual int complete_pointers(TypedWritable **plist, BamReader *manager);
264
265 static TypedWritable *make_TextureStage(const FactoryParams &params);
266
267protected:
268 void fillin(DatagramIterator& scan, BamReader* manager);
269
270public:
271 static TypeHandle get_class_type() {
272 return _type_handle;
273 }
274 static void init_type() {
275 TypedWritableReferenceCount::init_type();
276 register_type(_type_handle, "TextureStage",
277 TypedWritableReferenceCount::get_class_type());
278 }
279 virtual TypeHandle get_type() const {
280 return get_class_type();
281 }
282 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
283
284private:
285 static TypeHandle _type_handle;
286};
287
288INLINE std::ostream &operator << (std::ostream &out, const TextureStage &ts);
289
290EXPCL_PANDA_GOBJ std::ostream &operator << (std::ostream &out, TextureStage::Mode mode);
291EXPCL_PANDA_GOBJ std::ostream &operator << (std::ostream &out, TextureStage::CombineMode cm);
292EXPCL_PANDA_GOBJ std::ostream &operator << (std::ostream &out, TextureStage::CombineSource cs);
293EXPCL_PANDA_GOBJ std::ostream &operator << (std::ostream &out, TextureStage::CombineOperand co);
294
295
296#include "textureStage.I"
297
298#endif
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition: bamReader.h:110
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition: bamWriter.h:63
A class to retrieve the individual data elements previously stored in a Datagram.
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition: datagram.h:38
An instance of this class is passed to the Factory when requesting it to do its business and construc...
Definition: factoryParams.h:36
Encodes a string name in a hash table, mapping it to a pointer.
Definition: internalName.h:38
Defines the properties of a named stage of the multitexture pipeline.
Definition: textureStage.h:35
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
A base class for things which need to inherit from both TypedWritable and from ReferenceCount.
Base class for objects that can be written to and read from Bam files.
Definition: typedWritable.h:35
virtual void fillin(DatagramIterator &scan, BamReader *manager)
This internal function is intended to be called by each class's make_from_bam() method to read in all...
virtual void write_datagram(BamWriter *manager, Datagram &dg)
Writes the contents of this object to the datagram for shipping out to a Bam file.
virtual int complete_pointers(TypedWritable **p_list, BamReader *manager)
Receives an array of pointers, one for each time manager->read_pointer() was called in fillin().
This is a sequence number that increments monotonically.
Definition: updateSeq.h:37
An STL function object class, this is intended to be used on any ordered collection of class objects ...
Definition: stl_compares.h:73
This is our own Panda specialization on the default STL list.
Definition: plist.h:35
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(),...
Definition: register_type.I:22
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.