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(),...
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,...
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