Panda3D
eggRenderMode.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 eggRenderMode.h
10  * @author drose
11  * @date 1999-01-20
12  */
13 
14 #ifndef EGGRENDERMODE_H
15 #define EGGRENDERMODE_H
16 
17 #include "pandabase.h"
18 #include "typedObject.h"
19 
20 
21 /**
22  * This class stores miscellaneous rendering properties that is associated
23  * with geometry, and which may be set on the geometry primitive level, on the
24  * group above it, or indirectly via a texture. It's intended to be a base
25  * class for egg objects that can have these properties set.
26  *
27  * This class cannot inherit from EggObject, because it causes problems at the
28  * EggPolygon level with multiple appearances of the EggObject base class.
29  * And making EggObject a virtual base class is just no fun.
30  */
31 class EXPCL_PANDA_EGG EggRenderMode {
32 PUBLISHED:
33  EggRenderMode();
34  INLINE EggRenderMode(const EggRenderMode &copy);
35  EggRenderMode &operator = (const EggRenderMode &copy);
36 
37  void write(std::ostream &out, int indent_level) const;
38 
39  enum AlphaMode { // Specifies implementation of transparency.
40  AM_unspecified,
41  AM_off, // No transparency.
42  AM_on, // Use whatever the default model is.
43  AM_blend, // Normal alpha blending, e.g. TransparencyAttrib::M_alpha.
44  AM_blend_no_occlude, // Alpha blending w/o depth write.
45  AM_ms, // TransparencyAttrib::M_multisample
46  AM_ms_mask, // TransparencyAttrib::M_multisample_mask
47  AM_binary, // TransparencyAttrib::M_binary
48  AM_dual, // TransparencyAttrib::M_dual
49  AM_premultiplied // TransparencyAttrib::M_premultiplied_alpha
50  };
51 
52  enum DepthWriteMode {
53  DWM_unspecified, DWM_off, DWM_on
54  };
55 
56  enum DepthTestMode {
57  DTM_unspecified, DTM_off, DTM_on
58  };
59 
60  enum VisibilityMode {
61  VM_unspecified, VM_hidden, VM_normal
62  };
63 
64  INLINE void set_alpha_mode(AlphaMode mode);
65  INLINE AlphaMode get_alpha_mode() const;
66 
67  INLINE void set_depth_write_mode(DepthWriteMode mode);
68  INLINE DepthWriteMode get_depth_write_mode() const;
69 
70  INLINE void set_depth_test_mode(DepthTestMode mode);
71  INLINE DepthTestMode get_depth_test_mode() const;
72 
73  INLINE void set_visibility_mode(VisibilityMode mode);
74  INLINE VisibilityMode get_visibility_mode() const;
75 
76  INLINE void set_depth_offset(int bias);
77  INLINE int get_depth_offset() const;
78  INLINE bool has_depth_offset() const;
79  INLINE void clear_depth_offset();
80 
81  INLINE void set_draw_order(int order);
82  INLINE int get_draw_order() const;
83  INLINE bool has_draw_order() const;
84  INLINE void clear_draw_order();
85 
86  INLINE void set_bin(const std::string &bin);
87  INLINE std::string get_bin() const;
88  INLINE bool has_bin() const;
89  INLINE void clear_bin();
90 
91  // Comparison operators are handy.
92  bool operator == (const EggRenderMode &other) const;
93  INLINE bool operator != (const EggRenderMode &other) const;
94  bool operator < (const EggRenderMode &other) const;
95 
96  static AlphaMode string_alpha_mode(const std::string &string);
97  static DepthWriteMode string_depth_write_mode(const std::string &string);
98  static DepthTestMode string_depth_test_mode(const std::string &string);
99  static VisibilityMode string_visibility_mode(const std::string &string);
100 
101 private:
102  AlphaMode _alpha_mode;
103  DepthWriteMode _depth_write_mode;
104  DepthTestMode _depth_test_mode;
105  VisibilityMode _visibility_mode;
106  int _depth_offset;
107  bool _has_depth_offset;
108  int _draw_order;
109  bool _has_draw_order;
110  std::string _bin;
111 
112 
113 public:
114  static TypeHandle get_class_type() {
115  return _type_handle;
116  }
117  static void init_type() {
118  register_type(_type_handle, "EggRenderMode");
119  }
120 
121 private:
122  static TypeHandle _type_handle;
123 };
124 
125 EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggRenderMode::AlphaMode mode);
126 EXPCL_PANDA_EGG std::istream &operator >> (std::istream &in, EggRenderMode::AlphaMode &mode);
127 
128 EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggRenderMode::DepthWriteMode mode);
129 EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggRenderMode::DepthTestMode mode);
130 EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggRenderMode::VisibilityMode mode);
131 
132 #include "eggRenderMode.I"
133 
134 #endif
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(), along with zero to four record_derivation()s.
Definition: register_type.I:22
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This class stores miscellaneous rendering properties that is associated with geometry, and which may be set on the geometry primitive level, on the group above it, or indirectly via a texture.
Definition: eggRenderMode.h:31
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81