Panda3D
Loading...
Searching...
No Matches
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 write(std::ostream &out, int indent_level) const;
186 void output(std::ostream &out) const;
187
188 INLINE static TextureStage *get_default();
189
190PUBLISHED:
191 MAKE_PROPERTY(name, get_name, set_name);
192 MAKE_PROPERTY(sort, get_sort, set_sort);
193 MAKE_PROPERTY(priority, get_priority, set_priority);
194
195 MAKE_PROPERTY(texcoord_name, get_texcoord_name, set_texcoord_name);
196 MAKE_PROPERTY(tangent_name, get_tangent_name);
197 MAKE_PROPERTY(binormal_name, get_binormal_name);
198
199 MAKE_PROPERTY(mode, get_mode, set_mode);
200
201 MAKE_PROPERTY(color, get_color, set_color);
202 MAKE_PROPERTY(rgb_scale, get_rgb_scale, set_rgb_scale);
203 MAKE_PROPERTY(alpha_scale, get_alpha_scale, set_alpha_scale);
204 MAKE_PROPERTY(saved_result, get_saved_result, set_saved_result);
205
206 MAKE_PROPERTY(tex_view_offset, get_tex_view_offset, set_tex_view_offset);
207
208 MAKE_PROPERTY(default, get_default);
209
210public:
211 INLINE static UpdateSeq get_sort_seq();
212
213 INLINE void mark_used_by_auto_shader() const;
214
215private:
216 INLINE void update_color_flags();
217
218 static int get_expected_num_combine_operands(CombineMode cm);
219 static bool operand_valid_for_rgb(CombineOperand co);
220 static bool operand_valid_for_alpha(CombineOperand co);
221
222 std::string _name;
223 int _sort;
224 int _priority;
225 PT(InternalName) _texcoord_name;
226 Mode _mode;
227 LColor _color;
228 int _rgb_scale;
229 int _alpha_scale;
230 bool _saved_result;
231 int _tex_view_offset;
232 bool _involves_color_scale;
233 bool _uses_color;
234 bool _uses_primary_color;
235 bool _uses_last_saved_result;
236
237 CombineMode _combine_rgb_mode;
238 int _num_combine_rgb_operands;
239 CombineSource _combine_rgb_source0;
240 CombineOperand _combine_rgb_operand0;
241 CombineSource _combine_rgb_source1;
242 CombineOperand _combine_rgb_operand1;
243 CombineSource _combine_rgb_source2;
244 CombineOperand _combine_rgb_operand2;
245
246 CombineMode _combine_alpha_mode;
247 int _num_combine_alpha_operands;
248 CombineSource _combine_alpha_source0;
249 CombineOperand _combine_alpha_operand0;
250 CombineSource _combine_alpha_source1;
251 CombineOperand _combine_alpha_operand1;
252 CombineSource _combine_alpha_source2;
253 CombineOperand _combine_alpha_operand2;
254
255 static PT(TextureStage) _default_stage;
256 static UpdateSeq _sort_seq;
257
258 mutable bool _used_by_auto_shader;
259
260public:
261 // Datagram stuff
262 static void register_with_read_factory();
263 virtual void write_datagram(BamWriter *manager, Datagram &me);
264 virtual int complete_pointers(TypedWritable **plist, BamReader *manager);
265
266 static TypedWritable *make_TextureStage(const FactoryParams &params);
267
268protected:
269 void fillin(DatagramIterator& scan, BamReader* manager);
270
271public:
272 static TypeHandle get_class_type() {
273 return _type_handle;
274 }
275 static void init_type() {
276 TypedWritableReferenceCount::init_type();
277 register_type(_type_handle, "TextureStage",
278 TypedWritableReferenceCount::get_class_type());
279 }
280 virtual TypeHandle get_type() const {
281 return get_class_type();
282 }
283 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
284
285private:
286 static TypeHandle _type_handle;
287};
288
289INLINE std::ostream &operator << (std::ostream &out, const TextureStage &ts);
290
291EXPCL_PANDA_GOBJ std::ostream &operator << (std::ostream &out, TextureStage::Mode mode);
292EXPCL_PANDA_GOBJ std::ostream &operator << (std::ostream &out, TextureStage::CombineMode cm);
293EXPCL_PANDA_GOBJ std::ostream &operator << (std::ostream &out, TextureStage::CombineSource cs);
294EXPCL_PANDA_GOBJ std::ostream &operator << (std::ostream &out, TextureStage::CombineOperand co);
295
296
297#include "textureStage.I"
298
299#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...
Encodes a string name in a hash table, mapping it to a pointer.
Defines the properties of a named stage of the multitexture pipeline.
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.
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 ...
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(),...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.