mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 00:32:57 -04:00
ropeNode stats and optimizations
This commit is contained in:
parent
77012aee2e
commit
8d1a458c00
@ -54,6 +54,7 @@ PStatCollector GraphicsStateGuardian::_vertices_tristrip_pcollector("Vertices:Tr
|
||||
PStatCollector GraphicsStateGuardian::_vertices_trifan_pcollector("Vertices:Triangle fans");
|
||||
PStatCollector GraphicsStateGuardian::_vertices_tri_pcollector("Vertices:Triangles");
|
||||
PStatCollector GraphicsStateGuardian::_vertices_other_pcollector("Vertices:Other");
|
||||
PStatCollector GraphicsStateGuardian::_vertices_indexed_tristrip_pcollector("Vertices:Indexed triangle strips");
|
||||
PStatCollector GraphicsStateGuardian::_state_pcollector("State changes");
|
||||
PStatCollector GraphicsStateGuardian::_transform_state_pcollector("State changes:Transforms");
|
||||
PStatCollector GraphicsStateGuardian::_texture_state_pcollector("State changes:Textures");
|
||||
@ -1282,6 +1283,7 @@ init_frame_pstats() {
|
||||
_vertices_trifan_pcollector.clear_level();
|
||||
_vertices_tri_pcollector.clear_level();
|
||||
_vertices_other_pcollector.clear_level();
|
||||
_vertices_indexed_tristrip_pcollector.clear_level();
|
||||
|
||||
_state_pcollector.clear_level();
|
||||
_transform_state_pcollector.clear_level();
|
||||
|
@ -300,7 +300,8 @@ public:
|
||||
static PStatCollector _vertices_tristrip_pcollector;
|
||||
static PStatCollector _vertices_trifan_pcollector;
|
||||
static PStatCollector _vertices_tri_pcollector;
|
||||
static PStatCollector _vertices_other_pcollector;
|
||||
static PStatCollector _vertices_other_pcollector;
|
||||
static PStatCollector _vertices_indexed_tristrip_pcollector;
|
||||
static PStatCollector _state_pcollector;
|
||||
static PStatCollector _transform_state_pcollector;
|
||||
static PStatCollector _texture_state_pcollector;
|
||||
|
@ -1559,7 +1559,11 @@ draw_tristrip(GeomTristrip *geom, GeomContext *gc) {
|
||||
// PStatTimer timer(_draw_primitive_pcollector);
|
||||
// Using PStatTimer may cause a compiler crash.
|
||||
_draw_primitive_pcollector.start();
|
||||
_vertices_tristrip_pcollector.add_level(geom->get_num_vertices());
|
||||
if (geom->get_coords_index().is_null()) {
|
||||
_vertices_tristrip_pcollector.add_level(geom->get_num_vertices());
|
||||
} else {
|
||||
_vertices_indexed_tristrip_pcollector.add_level(geom->get_num_vertices());
|
||||
}
|
||||
#endif
|
||||
|
||||
issue_scene_graph_color();
|
||||
|
@ -32,6 +32,7 @@ CData() {
|
||||
_normal_mode = RopeNode::NM_none;
|
||||
_tube_up = LVector3f::up();
|
||||
_matrix = LMatrix4f::ident_mat();
|
||||
_has_matrix = false;
|
||||
_use_vertex_color = false;
|
||||
_num_subdiv = 10;
|
||||
_num_slices = 5;
|
||||
@ -53,6 +54,7 @@ CData(const RopeNode::CData ©) :
|
||||
_normal_mode(copy._normal_mode),
|
||||
_tube_up(copy._tube_up),
|
||||
_matrix(copy._matrix),
|
||||
_has_matrix(copy._has_matrix),
|
||||
_use_vertex_color(copy._use_vertex_color),
|
||||
_num_subdiv(copy._num_subdiv),
|
||||
_num_slices(copy._num_slices),
|
||||
@ -366,6 +368,32 @@ INLINE void RopeNode::
|
||||
set_matrix(const LMatrix4f &matrix) {
|
||||
CDWriter cdata(_cycler);
|
||||
cdata->_matrix = matrix;
|
||||
cdata->_has_matrix = true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: clear_matrix
|
||||
// Access: Published
|
||||
// Description: Resets the node's matrix to identity. See
|
||||
// set_matrix().
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void RopeNode::
|
||||
clear_matrix() {
|
||||
CDWriter cdata(_cycler);
|
||||
cdata->_matrix = LMatrix4f::ident_mat();
|
||||
cdata->_has_matrix = false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: has_matrix
|
||||
// Access: Published
|
||||
// Description: Returns true if the node has a matrix set, false
|
||||
// otherwise. See set_matrix().
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE bool RopeNode::
|
||||
has_matrix() const {
|
||||
CDReader cdata(_cycler);
|
||||
return cdata->_has_matrix;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
@ -27,9 +27,12 @@
|
||||
#include "bamReader.h"
|
||||
#include "datagram.h"
|
||||
#include "datagramIterator.h"
|
||||
#include "pStatTimer.h"
|
||||
|
||||
TypeHandle RopeNode::_type_handle;
|
||||
|
||||
PStatCollector RopeNode::_rope_node_pcollector("Cull:RopeNode");
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: RopeNode::CData::make_copy
|
||||
// Access: Public, Virtual
|
||||
@ -150,12 +153,19 @@ has_cull_callback() const {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
bool RopeNode::
|
||||
cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
||||
// Statistics
|
||||
PStatTimer timer(_rope_node_pcollector);
|
||||
|
||||
// Create some geometry on-the-fly to render the rope.
|
||||
if (get_num_subdiv() > 0) {
|
||||
NurbsCurveEvaluator *curve = get_curve();
|
||||
if (curve != (NurbsCurveEvaluator *)NULL) {
|
||||
PT(NurbsCurveResult) result =
|
||||
curve->evaluate(data._node_path.get_node_path(), get_matrix());
|
||||
PT(NurbsCurveResult) result;
|
||||
if (has_matrix()) {
|
||||
result = curve->evaluate(data._node_path.get_node_path(), get_matrix());
|
||||
} else {
|
||||
result = curve->evaluate(data._node_path.get_node_path());
|
||||
}
|
||||
|
||||
if (result->get_num_segments() > 0) {
|
||||
switch (get_render_mode()) {
|
||||
@ -251,6 +261,15 @@ do_recompute_bound(const NodePath &rel_to) {
|
||||
if (curve != (NurbsCurveEvaluator *)NULL) {
|
||||
pvector<LPoint3f> verts;
|
||||
get_curve()->get_vertices(verts, rel_to);
|
||||
|
||||
if (has_matrix()) {
|
||||
// And then apply the indicated matrix.
|
||||
const LMatrix4f &mat = get_matrix();
|
||||
pvector<LPoint3f>::iterator vi;
|
||||
for (vi = verts.begin(); vi != verts.end(); ++vi) {
|
||||
(*vi) = (*vi) * mat;
|
||||
}
|
||||
}
|
||||
|
||||
GeometricBoundingVolume *gbv;
|
||||
DCAST_INTO_R(gbv, bound, bound);
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "pandabase.h"
|
||||
#include "nurbsCurveEvaluator.h"
|
||||
#include "pandaNode.h"
|
||||
#include "pStatCollector.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : RopeNode
|
||||
@ -132,6 +133,8 @@ PUBLISHED:
|
||||
INLINE float get_thickness() const;
|
||||
|
||||
INLINE void set_matrix(const LMatrix4f &matrix);
|
||||
INLINE void clear_matrix();
|
||||
INLINE bool has_matrix() const;
|
||||
INLINE const LMatrix4f &get_matrix() const;
|
||||
|
||||
void reset_bound(const NodePath &rel_to);
|
||||
@ -201,6 +204,7 @@ private:
|
||||
NormalMode _normal_mode;
|
||||
LVector3f _tube_up;
|
||||
LMatrix4f _matrix;
|
||||
bool _has_matrix;
|
||||
bool _use_vertex_color;
|
||||
int _num_subdiv;
|
||||
int _num_slices;
|
||||
@ -211,6 +215,8 @@ private:
|
||||
typedef CycleDataReader<CData> CDReader;
|
||||
typedef CycleDataWriter<CData> CDWriter;
|
||||
|
||||
static PStatCollector _rope_node_pcollector;
|
||||
|
||||
public:
|
||||
static void register_with_read_factory();
|
||||
virtual void write_datagram(BamWriter *manager, Datagram &dg);
|
||||
|
@ -26,9 +26,12 @@
|
||||
#include "bamReader.h"
|
||||
#include "datagram.h"
|
||||
#include "datagramIterator.h"
|
||||
#include "pStatTimer.h"
|
||||
|
||||
TypeHandle SheetNode::_type_handle;
|
||||
|
||||
PStatCollector SheetNode::_sheet_node_pcollector("Cull:SheetNode");
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: SheetNode::CData::make_copy
|
||||
// Access: Public, Virtual
|
||||
@ -150,6 +153,9 @@ has_cull_callback() const {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
bool SheetNode::
|
||||
cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
||||
// Statistics
|
||||
PStatTimer timer(_sheet_node_pcollector);
|
||||
|
||||
// Create some geometry on-the-fly to render the sheet.
|
||||
if (get_num_u_subdiv() > 0 && get_num_v_subdiv() > 0) {
|
||||
NurbsSurfaceEvaluator *surface = get_surface();
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "pandabase.h"
|
||||
#include "nurbsSurfaceEvaluator.h"
|
||||
#include "pandaNode.h"
|
||||
#include "pStatCollector.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : SheetNode
|
||||
@ -94,6 +95,8 @@ private:
|
||||
typedef CycleDataReader<CData> CDReader;
|
||||
typedef CycleDataWriter<CData> CDWriter;
|
||||
|
||||
static PStatCollector _sheet_node_pcollector;
|
||||
|
||||
public:
|
||||
static void register_with_read_factory();
|
||||
virtual void write_datagram(BamWriter *manager, Datagram &dg);
|
||||
|
@ -155,6 +155,7 @@ static LevelCollectorProperties level_properties[] = {
|
||||
{ 1, "Vertices:Triangles", { 0.8, 0.8, 0.8 } },
|
||||
{ 1, "Vertices:Triangle fans", { 0.8, 0.5, 0.2 } },
|
||||
{ 1, "Vertices:Triangle strips", { 0.2, 0.5, 0.8 } },
|
||||
{ 1, "Vertices:Indexed triangle strips", { 0.5, 0.2, 0.8 } },
|
||||
{ 1, "Vertices:Display lists", { 0.8, 0.5, 1.0 } },
|
||||
{ 1, "Nodes", { 0.4, 0.2, 0.8 }, "", 500.0 },
|
||||
{ 1, "Nodes:GeomNodes", { 0.8, 0.2, 0.0 } },
|
||||
|
Loading…
x
Reference in New Issue
Block a user