Panda3D
Loading...
Searching...
No Matches
textureStage.cxx
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.cxx
10 * @author MAsaduzz
11 * @date 2004-07-16
12 */
13
14#include "textureStage.h"
15#include "internalName.h"
16#include "bamReader.h"
17#include "bamWriter.h"
18#include "indent.h"
19
20using std::ostream;
21
22PT(TextureStage) TextureStage::_default_stage;
23UpdateSeq TextureStage::_sort_seq;
24
25TypeHandle TextureStage::_type_handle;
26
27/**
28 * Initialize the texture stage at construction
29 */
31TextureStage(const std::string &name) : _used_by_auto_shader(false) {
32 _name = name;
33 _sort = 0;
34 _priority = 0;
35 _texcoord_name = InternalName::get_texcoord();
36 _mode = M_modulate;
37 _color.set(0.0f, 0.0f, 0.0f, 1.0f);
38 _rgb_scale = 1;
39 _alpha_scale = 1;
40 _saved_result = false;
41 _tex_view_offset = 0;
42 _combine_rgb_mode = CM_undefined;
43 _num_combine_rgb_operands = 0;
44 _combine_rgb_source0 = CS_undefined;
45 _combine_rgb_operand0 = CO_undefined;
46 _combine_rgb_source1 = CS_undefined;
47 _combine_rgb_operand1 = CO_undefined;
48 _combine_rgb_source2 = CS_undefined;
49 _combine_rgb_operand2 = CO_undefined;
50 _combine_alpha_mode = CM_undefined;
51 _num_combine_alpha_operands = 0;
52 _combine_alpha_source0 = CS_undefined;
53 _combine_alpha_operand0 = CO_undefined;
54 _combine_alpha_source1 = CS_undefined;
55 _combine_alpha_operand1 = CO_undefined;
56 _combine_alpha_source2 = CS_undefined;
57 _combine_alpha_operand2 = CO_undefined;
58
59 _uses_color = false;
60 _involves_color_scale = false;
61}
62
63/**
64 * just copy the members of other to this
65 */
67operator = (const TextureStage &other) {
68 _name = other._name;
69 _sort = other._sort;
70 _priority = other._priority;
71 _texcoord_name = other._texcoord_name;
72 _mode = other._mode;
73 _color = other._color;
74 _rgb_scale = other._rgb_scale;
75 _alpha_scale = other._alpha_scale;
76 _saved_result = other._saved_result;
77 _tex_view_offset = other._tex_view_offset;
78
79 _combine_rgb_mode = other._combine_rgb_mode;
80 _combine_rgb_source0 = other._combine_rgb_source0;
81 _combine_rgb_operand0 = other._combine_rgb_operand0;
82 _combine_rgb_source1 = other._combine_rgb_source1;
83 _combine_rgb_operand1 = other._combine_rgb_operand1;
84 _combine_rgb_source2 = other._combine_rgb_source2;
85 _combine_rgb_operand2 = other._combine_rgb_operand2;
86 _combine_alpha_mode = other._combine_alpha_mode;
87 _combine_alpha_source0 = other._combine_alpha_source0;
88 _combine_alpha_operand0 = other._combine_alpha_operand0;
89 _combine_alpha_source1 = other._combine_alpha_source1;
90 _combine_alpha_operand1 = other._combine_alpha_operand1;
91 _combine_alpha_source2 = other._combine_alpha_source2;
92 _combine_alpha_operand2 = other._combine_alpha_operand2;
93
94 _uses_color = other._uses_color;
95 _involves_color_scale = other._involves_color_scale;
96
97 _used_by_auto_shader = false;
98}
99
100/**
101 *
102 */
103TextureStage::
104~TextureStage() {
105}
106
107/**
108 * Returns a number less than zero if this TextureStage sorts before the other
109 * one, greater than zero if it sorts after, or zero if they are equivalent.
110 * The sorting order is arbitrary and largely meaningless, except to
111 * differentiate different stages.
112 */
114compare_to(const TextureStage &other) const {
115 // We put the sort parameter first, so that we sorting a list of
116 // TextureStages will happen to put them in sorted order, even though we
117 // don't promise to do that. But there's no reason not to do so, and it
118 // might be more convenient for the developer.
119 if (get_sort() != other.get_sort()) {
120 return get_sort() < other.get_sort() ? -1 : 1;
121 }
122
123 // The remaining parameters are arbitrary. We start with the name, because
124 // that's most likely to be consistent between similar TextureStages, and
125 // different between different TextureStages.
126 int compare = strcmp(get_name().c_str(), other.get_name().c_str());
127 if (compare != 0) {
128 return compare;
129 }
130
131 if (get_priority() != other.get_priority()) {
132 return get_priority() < other.get_priority() ? -1 : 1;
133 }
134 if (get_texcoord_name() != other.get_texcoord_name()) {
135 return get_texcoord_name() < other.get_texcoord_name() ? -1 : 1;
136 }
137 if (get_mode() != other.get_mode()) {
138 return get_mode() < other.get_mode() ? -1 : 1;
139 }
140 if (get_rgb_scale() != other.get_rgb_scale()) {
141 return get_rgb_scale() < other.get_rgb_scale() ? -1 : 1;
142 }
143 if (get_alpha_scale() != other.get_alpha_scale()) {
144 return get_alpha_scale() < other.get_alpha_scale() ? -1 : 1;
145 }
146 if (get_saved_result() != other.get_saved_result()) {
147 return get_saved_result() < other.get_saved_result() ? -1 : 1;
148 }
149 if (get_tex_view_offset() != other.get_tex_view_offset()) {
150 return get_tex_view_offset() < other.get_tex_view_offset() ? -1 : 1;
151 }
152 if (get_mode() == M_combine) {
154 return get_combine_rgb_mode() < other.get_combine_rgb_mode() ? -1 : 1;
155 }
156
159 }
160 if (get_num_combine_rgb_operands() >= 1) {
162 return get_combine_rgb_source0() < other.get_combine_rgb_source0() ? -1 : 1;
163 }
165 return get_combine_rgb_operand0() < other.get_combine_rgb_operand0() ? -1 : 1;
166 }
167 }
168 if (get_num_combine_rgb_operands() >= 2) {
170 return get_combine_rgb_source1() < other.get_combine_rgb_source1() ? -1 : 1;
171 }
173 return get_combine_rgb_operand1() < other.get_combine_rgb_operand1() ? -1 : 1;
174 }
175 }
176 if (get_num_combine_rgb_operands() >= 3) {
178 return get_combine_rgb_source2() < other.get_combine_rgb_source2() ? -1 : 1;
179 }
181 return get_combine_rgb_operand2() < other.get_combine_rgb_operand2() ? -1 : 1;
182 }
183 }
185 return get_combine_alpha_mode() < other.get_combine_alpha_mode() ? -1 : 1;
186 }
187
190 }
193 return get_combine_alpha_source0() < other.get_combine_alpha_source0() ? -1 : 1;
194 }
196 return get_combine_alpha_operand0() < other.get_combine_alpha_operand0() ? -1 : 1;
197 }
198 }
201 return get_combine_alpha_source1() < other.get_combine_alpha_source1() ? -1 : 1;
202 }
204 return get_combine_alpha_operand1() < other.get_combine_alpha_operand1() ? -1 : 1;
205 }
206 }
209 return get_combine_alpha_source2() < other.get_combine_alpha_source2() ? -1 : 1;
210 }
212 return get_combine_alpha_operand2() < other.get_combine_alpha_operand2() ? -1 : 1;
213 }
214 }
215 }
216
217 return 0;
218}
219
220/**
221 * Writes the details of this stage
222 */
224write(ostream &out) const {
225 write(out, 0);
226}
227
228/**
229 * Writes the details of this stage
230 */
232write(ostream &out, int indent_level) const {
233 indent(out, indent_level)
234 << "TextureStage " << get_name() << ", sort = " << get_sort()
235 << ", priority = " << get_priority() << "\n";
236
237 indent(out, indent_level)
238 << " texcoords = " << get_texcoord_name()->get_name()
239 << ", mode = " << get_mode() << ", color = " << get_color()
240 << ", scale = " << get_rgb_scale() << ", " << get_alpha_scale()
241 << ", saved_result = " << get_saved_result()
242 << ", tex_view_offset = " << get_tex_view_offset() << "\n";
243
244 if (get_mode() == M_combine) {
245 indent(out, indent_level)
246 << " RGB combine mode = " << get_combine_rgb_mode() << "\n";
247 if (get_num_combine_rgb_operands() >= 1) {
248 out << " 0: " << get_combine_rgb_source0() << ", "
249 << get_combine_rgb_operand0() << "\n";
250 }
251 if (get_num_combine_rgb_operands() >= 2) {
252 out << " 1: " << get_combine_rgb_source1() << ", "
253 << get_combine_rgb_operand1() << "\n";
254 }
255 if (get_num_combine_rgb_operands() >= 3) {
256 out << " 2: " << get_combine_rgb_source2() << ", "
257 << get_combine_rgb_operand2() << "\n";
258 }
259 indent(out, indent_level)
260 << " alpha combine mode = " << get_combine_alpha_mode() << "\n";
262 out << " 0: " << get_combine_alpha_source0() << ", "
263 << get_combine_alpha_operand0() << "\n";
264 }
266 out << " 1: " << get_combine_alpha_source1() << ", "
267 << get_combine_alpha_operand1() << "\n";
268 }
270 out << " 2: " << get_combine_alpha_source2() << ", "
271 << get_combine_alpha_operand2() << "\n";
272 }
273 }
274}
275
276/**
277 * Just a single line output
278 */
280output(ostream &out) const {
281 out << "TextureStage " << get_name();
282}
283
284/**
285 * Returns the number of combine operands expected with the indicated combine
286 * mode (0, 1, 2, or 3).
287 */
288int TextureStage::
289get_expected_num_combine_operands(TextureStage::CombineMode cm) {
290 switch (cm) {
291 case CM_undefined:
292 return 0;
293
294 case CM_replace:
295 return 1;
296
297 case CM_modulate:
298 case CM_add:
299 case CM_add_signed:
300 case CM_subtract:
301 case CM_dot3_rgb:
302 case CM_dot3_rgba:
303 return 2;
304
305 case CM_interpolate:
306 return 3;
307 }
308
309 return 0;
310}
311
312/**
313 * Returns true if the indicated CombineOperand is valid for one of the RGB
314 * modes, false otherwise.
315 */
316bool TextureStage::
317operand_valid_for_rgb(TextureStage::CombineOperand co) {
318 switch (co) {
319 case CO_undefined:
320 return false;
321
322 case CO_src_color:
323 case CO_one_minus_src_color:
324 case CO_src_alpha:
325 case CO_one_minus_src_alpha:
326 return true;
327 }
328
329 return false;
330}
331
332/**
333 * Returns true if the indicated CombineOperand is valid for one of the alpha
334 * modes, false otherwise.
335 */
336bool TextureStage::
337operand_valid_for_alpha(TextureStage::CombineOperand co) {
338 switch (co) {
339 case CO_undefined:
340 case CO_src_color:
341 case CO_one_minus_src_color:
342 return false;
343
344 case CO_src_alpha:
345 case CO_one_minus_src_alpha:
346 return true;
347 }
348
349 return false;
350}
351
352/**
353 * Factory method to generate a TextureStage object
354 */
359
360/**
361 * Factory method to generate a TextureStage object
362 */
364make_TextureStage(const FactoryParams &params) {
365 DatagramIterator scan;
366 BamReader *manager;
367
368 parse_params(params, scan, manager);
369
370 bool is_default = scan.get_bool();
371 if (is_default) {
372 return get_default();
373 } else {
374 TextureStage *me = new TextureStage("");
375 me->fillin(scan, manager);
376 return me;
377 }
378}
379
380/**
381 * Function that reads out of the datagram (or asks manager to read) all of
382 * the data that is needed to re-create this object and stores it in the
383 * appropiate place
384 */
385void TextureStage::
386fillin(DatagramIterator &scan, BamReader *manager) {
387 _name = scan.get_string();
388 _sort = scan.get_int32();
389 _priority = scan.get_int32();
390
391 manager->read_pointer(scan);
392
393 _mode = (TextureStage::Mode) scan.get_uint8();
394 _color.read_datagram(scan);
395
396 _rgb_scale = scan.get_uint8();
397 _alpha_scale = scan.get_uint8();
398 _saved_result = scan.get_bool();
399 _tex_view_offset = 0;
400 if (manager->get_file_minor_ver() >= 26) {
401 _tex_view_offset = scan.get_int32();
402 }
403
404 _combine_rgb_mode = (TextureStage::CombineMode) scan.get_uint8();
405 _num_combine_rgb_operands = scan.get_uint8();
406 _combine_rgb_source0 = (TextureStage::CombineSource) scan.get_uint8();
407 _combine_rgb_operand0 = (TextureStage::CombineOperand) scan.get_uint8();
408 _combine_rgb_source1 = (TextureStage::CombineSource) scan.get_uint8();
409 _combine_rgb_operand1 = (TextureStage::CombineOperand) scan.get_uint8();
410 _combine_rgb_source2 = (TextureStage::CombineSource) scan.get_uint8();
411 _combine_rgb_operand2 = (TextureStage::CombineOperand) scan.get_uint8();
412
413 _combine_alpha_mode = (TextureStage::CombineMode) scan.get_uint8();
414 _num_combine_alpha_operands = scan.get_uint8();
415 _combine_alpha_source0 = (TextureStage::CombineSource) scan.get_uint8();
416 _combine_alpha_operand0 = (TextureStage::CombineOperand) scan.get_uint8();
417 _combine_alpha_source1 = (TextureStage::CombineSource) scan.get_uint8();
418 _combine_alpha_operand1 = (TextureStage::CombineOperand) scan.get_uint8();
419 _combine_alpha_source2 = (TextureStage::CombineSource) scan.get_uint8();
420 _combine_alpha_operand2 = (TextureStage::CombineOperand) scan.get_uint8();
421
422 update_color_flags();
423}
424
425/**
426 * Receives an array of pointers, one for each time manager->read_pointer()
427 * was called in fillin(). Returns the number of pointers processed.
428 */
430complete_pointers(TypedWritable **p_list, BamReader *manager) {
431 int pi = TypedWritableReferenceCount::complete_pointers(p_list, manager);
432
433 _texcoord_name = DCAST(InternalName, p_list[pi++]);
434
435 return pi;
436}
437
438/**
439 * Function to write the important information in the particular object to a
440 * Datagram
441 */
443write_datagram(BamWriter *manager, Datagram &me) {
444 // These properties are read in again by fillin(), above.
445 if (this == get_default()) {
446 me.add_bool(true);
447 } else {
448 me.add_bool(false);
449 me.add_string(_name);
450 me.add_int32(_sort);
451 me.add_int32(_priority);
452
453 manager->write_pointer(me, _texcoord_name);
454
455 me.add_uint8(_mode);
456 _color.write_datagram(me);
457 me.add_uint8(_rgb_scale);
458 me.add_uint8(_alpha_scale);
459 me.add_bool(_saved_result);
460
461 if (manager->get_file_minor_ver() >= 26) {
462 me.add_int32(_tex_view_offset);
463 }
464
465 me.add_uint8(_combine_rgb_mode);
466 me.add_uint8(_num_combine_rgb_operands);
467 me.add_uint8(_combine_rgb_source0);
468 me.add_uint8(_combine_rgb_operand0);
469 me.add_uint8(_combine_rgb_source1);
470 me.add_uint8(_combine_rgb_operand1);
471 me.add_uint8(_combine_rgb_source2);
472 me.add_uint8(_combine_rgb_operand2);
473
474 me.add_uint8(_combine_alpha_mode);
475 me.add_uint8(_num_combine_alpha_operands);
476 me.add_uint8(_combine_alpha_source0);
477 me.add_uint8(_combine_alpha_operand0);
478 me.add_uint8(_combine_alpha_source1);
479 me.add_uint8(_combine_alpha_operand1);
480 me.add_uint8(_combine_alpha_source2);
481 me.add_uint8(_combine_alpha_operand2);
482 }
483}
484
485ostream &
486operator << (ostream &out, TextureStage::Mode mode) {
487 switch (mode) {
488 case TextureStage::M_modulate:
489 return out << "modulate";
490
491 case TextureStage::M_decal:
492 return out << "decal";
493
494 case TextureStage::M_blend:
495 return out << "blend";
496
497 case TextureStage::M_replace:
498 return out << "replace";
499
500 case TextureStage::M_add:
501 return out << "add";
502
503 case TextureStage::M_combine:
504 return out << "combine";
505
506 case TextureStage::M_blend_color_scale:
507 return out << "blend_color_scale";
508
509 case TextureStage::M_modulate_glow:
510 return out << "modulate_glow";
511
512 case TextureStage::M_modulate_gloss:
513 return out << "modulate_gloss";
514
515 case TextureStage::M_normal:
516 return out << "normal";
517
518 case TextureStage::M_normal_height:
519 return out << "normal_height";
520
521 case TextureStage::M_glow:
522 return out << "glow";
523
524 case TextureStage::M_gloss:
525 return out << "gloss";
526
527 case TextureStage::M_height:
528 return out << "height";
529
530 case TextureStage::M_selector:
531 return out << "selector";
532
533 case TextureStage::M_normal_gloss:
534 return out << "normal_gloss";
535
536 case TextureStage::M_emission:
537 return out << "emission";
538 }
539
540 return out << "**invalid Mode(" << (int)mode << ")**";
541}
542
543ostream &
544operator << (ostream &out, TextureStage::CombineMode cm) {
545 switch (cm) {
546 case TextureStage::CM_undefined:
547 return out << "undefined";
548
549 case TextureStage::CM_replace:
550 return out << "replace";
551
552 case TextureStage::CM_modulate:
553 return out << "modulate";
554
555 case TextureStage::CM_add:
556 return out << "add";
557
558 case TextureStage::CM_add_signed:
559 return out << "add_signed";
560
561 case TextureStage::CM_interpolate:
562 return out << "interpolate";
563
564 case TextureStage::CM_subtract:
565 return out << "subtract";
566
567 case TextureStage::CM_dot3_rgb:
568 return out << "dot3_rgb";
569
570 case TextureStage::CM_dot3_rgba:
571 return out << "dot3_rgba";
572 }
573
574 return out << "**invalid CombineMode(" << (int)cm << ")**";
575}
576
577ostream &
578operator << (ostream &out, TextureStage::CombineSource cs) {
579 switch (cs) {
580 case TextureStage::CS_undefined:
581 return out << "undefined";
582
583 case TextureStage::CS_texture:
584 return out << "texture";
585
586 case TextureStage::CS_constant:
587 return out << "constant";
588
589 case TextureStage::CS_primary_color:
590 return out << "primary_color";
591
592 case TextureStage::CS_previous:
593 return out << "previous";
594
595 case TextureStage::CS_constant_color_scale:
596 return out << "constant_color_scale";
597
598 case TextureStage::CS_last_saved_result:
599 return out << "last_saved_result";
600 }
601
602 return out << "**invalid CombineSource(" << (int)cs << ")**";
603}
604
605ostream &
606operator << (ostream &out, TextureStage::CombineOperand co) {
607 switch (co) {
608 case TextureStage::CO_undefined:
609 return out << "undefined";
610
611 case TextureStage::CO_src_color:
612 return out << "src_color";
613
614 case TextureStage::CO_one_minus_src_color:
615 return out << "one_minus_src_color";
616
617 case TextureStage::CO_src_alpha:
618 return out << "src_alpha";
619
620 case TextureStage::CO_one_minus_src_alpha:
621 return out << "one_minus_src_alpha";
622 }
623
624 return out << "**invalid CombineOperand(" << (int)co << ")**";
625}
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void parse_params(const FactoryParams &params, DatagramIterator &scan, BamReader *&manager)
Takes in a FactoryParams, passed from a WritableFactory into any TypedWritable's make function,...
Definition bamReader.I:275
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition bamReader.h:110
bool read_pointer(DatagramIterator &scan)
The interface for reading a pointer to another object from a Bam file.
int get_file_minor_ver() const
Returns the minor version number of the Bam file currently being read.
Definition bamReader.I:83
static WritableFactory * get_factory()
Returns the global WritableFactory for generating TypedWritable objects.
Definition bamReader.I:177
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition bamWriter.h:63
void write_pointer(Datagram &packet, const TypedWritable *dest)
The interface for writing a pointer to another object to a Bam file.
int get_file_minor_ver() const
Returns the minor version number of the Bam file currently being written.
Definition bamWriter.I:59
A class to retrieve the individual data elements previously stored in a Datagram.
uint8_t get_uint8()
Extracts an unsigned 8-bit integer.
bool get_bool()
Extracts a boolean value.
std::string get_string()
Extracts a variable-length string.
int32_t get_int32()
Extracts a signed 32-bit integer.
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition datagram.h:38
void add_int32(int32_t value)
Adds a signed 32-bit integer to the datagram.
Definition datagram.I:67
void add_uint8(uint8_t value)
Adds an unsigned 8-bit integer to the datagram.
Definition datagram.I:50
void add_bool(bool value)
Adds a boolean value to the datagram.
Definition datagram.I:34
void add_string(const std::string &str)
Adds a variable-length string to the datagram.
Definition datagram.I:219
An instance of this class is passed to the Factory when requesting it to do its business and construc...
void register_factory(TypeHandle handle, CreateFunc *func, void *user_data=nullptr)
Registers a new kind of thing the Factory will be able to create.
Definition factory.I:73
Encodes a string name in a hash table, mapping it to a pointer.
Defines the properties of a named stage of the multitexture pipeline.
get_default
Returns the default TextureStage that will be used for all texturing that does not name a particular ...
int compare_to(const TextureStage &other) const
Returns a number less than zero if this TextureStage sorts before the other one, greater than zero if...
CombineMode get_combine_alpha_mode() const
Get combine_alpha_mode.
get_saved_result
Returns the current setting of the saved_result flag.
get_name
Returns the name of this texture stage.
CombineOperand get_combine_rgb_operand2() const
Get operand2 of combine_rgb_mode.
CombineSource get_combine_alpha_source1() const
Get source1 of combine_alpha_mode.
void write(std::ostream &out) const
Writes the details of this stage.
void output(std::ostream &out) const
Just a single line output.
TextureStage(const std::string &name)
Initialize the texture stage at construction.
static void register_with_read_factory()
Factory method to generate a TextureStage object.
virtual int complete_pointers(TypedWritable **plist, BamReader *manager)
Receives an array of pointers, one for each time manager->read_pointer() was called in fillin().
void operator=(const TextureStage &copy)
just copy the members of other to this
CombineMode get_combine_rgb_mode() const
Get the combine_rgb_mode.
CombineSource get_combine_rgb_source1() const
Get source1 of combine_rgb_mode.
CombineOperand get_combine_alpha_operand0() const
Get operand0 of combine_alpha_mode.
get_priority
Returns the priority associated with this stage.
CombineOperand get_combine_rgb_operand1() const
Get operand1 of combine_rgb_mode.
CombineSource get_combine_alpha_source0() const
Get source0 of combine_alpha_mode.
get_rgb_scale
See set_rgb_scale().
virtual void write_datagram(BamWriter *manager, Datagram &me)
Function to write the important information in the particular object to a Datagram.
get_alpha_scale
See set_alpha_scale().
get_sort
Returns the sort order of this texture stage.
int get_num_combine_rgb_operands() const
Returns the number of meaningful operands that may be retrieved via get_combine_rgb_sourceN() and get...
static TypedWritable * make_TextureStage(const FactoryParams &params)
Factory method to generate a TextureStage object.
CombineOperand get_combine_alpha_operand1() const
Get operand1 of combine_alpha_mode.
get_color
return the color for this stage
get_tex_view_offset
Returns the current setting of the tex_view_offset.
CombineSource get_combine_rgb_source0() const
Get source0 of combine_rgb_mode.
CombineSource get_combine_rgb_source2() const
Get source2 of combine_rgb_mode.
get_mode
Return the mode of this stage.
int get_num_combine_alpha_operands() const
Returns the number of meaningful operands that may be retrieved via get_combine_alpha_sourceN() and g...
CombineOperand get_combine_rgb_operand0() const
Get operand0 of combine_rgb_mode.
CombineSource get_combine_alpha_source2() const
Get source2 of combine_alpha_mode.
get_texcoord_name
See set_texcoord_name.
CombineOperand get_combine_alpha_operand2() const
Get operand2 of combine_alpha_mode.
TypeHandle is the identifier used to differentiate C++ class types.
Definition typeHandle.h:81
Base class for objects that can be written to and read from Bam files.
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
std::ostream & indent(std::ostream &out, int indent_level)
A handy function for doing text formatting.
Definition indent.cxx:20
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.