diff --git a/panda/src/pgraph/nodePath.cxx b/panda/src/pgraph/nodePath.cxx index d27c9d9c20..379195079c 100644 --- a/panda/src/pgraph/nodePath.cxx +++ b/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; } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/pgraph/nodePath.h b/panda/src/pgraph/nodePath.h index 1b100f78c8..7788efb986 100644 --- a/panda/src/pgraph/nodePath.h +++ b/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();