Browse Source

add set_render_mode_thickness(), set_render_mode_perspective()

David Rose 19 years ago
parent
commit
1f320c8196
2 changed files with 75 additions and 4 deletions
  1. 72 4
      panda/src/pgraph/nodePath.cxx
  2. 3 0
      panda/src/pgraph/nodePath.h

+ 72 - 4
panda/src/pgraph/nodePath.cxx

@@ -4490,7 +4490,9 @@ get_fog() const {
 void NodePath::
 set_render_mode_wireframe(int priority) {
   nassertv_always(!is_empty());
-  node()->set_attrib(RenderModeAttrib::make(RenderModeAttrib::M_wireframe), priority);
+  float thickness = get_render_mode_thickness();
+  bool perspective = get_render_mode_perspective();
+  node()->set_attrib(RenderModeAttrib::make(RenderModeAttrib::M_wireframe, thickness, perspective), priority);
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -4503,7 +4505,53 @@ set_render_mode_wireframe(int priority) {
 void NodePath::
 set_render_mode_filled(int priority) {
   nassertv_always(!is_empty());
-  node()->set_attrib(RenderModeAttrib::make(RenderModeAttrib::M_filled), priority);
+  float thickness = get_render_mode_thickness();
+  bool perspective = get_render_mode_perspective();
+  node()->set_attrib(RenderModeAttrib::make(RenderModeAttrib::M_filled, thickness, perspective), priority);
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: NodePath::set_render_mode_perspective
+//       Access: Published
+//  Description: Sets up the point geometry at this level and below to
+//               render as perspective sprites (that is, billboarded
+//               quads).  The thickness, as specified with
+//               set_render_mode_thickness(), is the width of each
+//               point in 3-D units, unless it is overridden on a
+//               per-vertex basis.  This does not affect geometry
+//               other than points.
+//
+//               If you want the quads to be individually textured,
+//               you should also set a TexGenAttrib::M_point_sprite on
+//               the node.
+////////////////////////////////////////////////////////////////////
+void NodePath::
+set_render_mode_perspective(bool perspective, int priority) {
+  nassertv_always(!is_empty());
+  RenderModeAttrib::Mode mode = get_render_mode();
+  float thickness = get_render_mode_thickness();
+  node()->set_attrib(RenderModeAttrib::make(mode, thickness, perspective), priority);
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: NodePath::set_render_mode_thickness
+//       Access: Published
+//  Description: Sets up the point geometry at this level and below to
+//               render as thick points (that is, billboarded
+//               quads).  The thickness is in pixels, unless
+//               set_render_mode_perspective is also true, in which
+//               case it is in 3-D units.
+//
+//               If you want the quads to be individually textured,
+//               you should also set a TexGenAttrib::M_point_sprite on
+//               the node.
+////////////////////////////////////////////////////////////////////
+void NodePath::
+set_render_mode_thickness(float thickness, int priority) {
+  nassertv_always(!is_empty());
+  RenderModeAttrib::Mode mode = get_render_mode();
+  bool perspective = get_render_mode_perspective();
+  node()->set_attrib(RenderModeAttrib::make(mode, thickness, perspective), priority);
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -4573,7 +4621,7 @@ get_render_mode() const {
 //       Access: Published
 //  Description: Returns the render mode thickness that has been
 //               specifically set on this node via set_render_mode(),
-//               or 0.0 if nothing has been set.
+//               or 1.0 if nothing has been set.
 ////////////////////////////////////////////////////////////////////
 float NodePath::
 get_render_mode_thickness() const {
@@ -4585,7 +4633,27 @@ get_render_mode_thickness() const {
     return ta->get_thickness();
   }
 
-  return 0.0f;
+  return 1.0f;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: NodePath::get_render_mode_perspective
+//       Access: Published
+//  Description: Returns the flag that has been set on this node via
+//               set_render_mode_perspective(), or false if no flag
+//               has been set.
+////////////////////////////////////////////////////////////////////
+bool NodePath::
+get_render_mode_perspective() const {
+  nassertr_always(!is_empty(), 0.0f);
+  const RenderAttrib *attrib =
+    node()->get_attrib(RenderModeAttrib::get_class_type());
+  if (attrib != (const RenderAttrib *)NULL) {
+    const RenderModeAttrib *ta = DCAST(RenderModeAttrib, attrib);
+    return ta->get_perspective();
+  }
+
+  return false;
 }
 
 ////////////////////////////////////////////////////////////////////

+ 3 - 0
panda/src/pgraph/nodePath.h

@@ -694,11 +694,14 @@ PUBLISHED:
 
   void set_render_mode_wireframe(int priority = 0);
   void set_render_mode_filled(int priority = 0);
+  void set_render_mode_thickness(float thickness, int priority = 0);
+  void set_render_mode_perspective(bool perspective, int priority = 0);
   void set_render_mode(RenderModeAttrib::Mode mode, float thickness, int priority = 0);
   void clear_render_mode();
   bool has_render_mode() const;
   RenderModeAttrib::Mode get_render_mode() const;
   float get_render_mode_thickness() const;
+  bool get_render_mode_perspective() const;
 
   void set_two_sided(bool two_sided, int priority = 0);
   void clear_two_sided();