瀏覽代碼

clean up state pstatting

David Rose 21 年之前
父節點
當前提交
fa5f9a7e15

+ 19 - 12
panda/src/display/graphicsStateGuardian.I

@@ -241,14 +241,17 @@ reset_if_new() {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 INLINE void GraphicsStateGuardian::
 INLINE void GraphicsStateGuardian::
 modify_state(const RenderState *state) {
 modify_state(const RenderState *state) {
+  if (!state->is_empty()) {
 #ifndef NDEBUG
 #ifndef NDEBUG
-  if (gsg_cat.is_spam()) {
-    gsg_cat.spam() << "Modifying GSG state with:\n";
-    state->write(gsg_cat.spam(false), 2);
-  }
+    if (gsg_cat.is_spam()) {
+      gsg_cat.spam() << "Modifying GSG state with:\n";
+      state->write(gsg_cat.spam(false), 2);
+    }
 #endif
 #endif
-  _state = _state->issue_delta_modify(state, this);
-  finish_modify_state();
+    _state_pcollector.add_level(1);
+    _state = _state->issue_delta_modify(state, this);
+    finish_modify_state();
+  }
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
@@ -265,14 +268,17 @@ modify_state(const RenderState *state) {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 INLINE void GraphicsStateGuardian::
 INLINE void GraphicsStateGuardian::
 set_state(const RenderState *state) {
 set_state(const RenderState *state) {
+  if (state != _state) {
 #ifndef NDEBUG
 #ifndef NDEBUG
-  if (gsg_cat.is_spam()) {
-    gsg_cat.spam() << "Setting GSG state to:\n";
-    state->write(gsg_cat.spam(false), 2);
-  }
+    if (gsg_cat.is_spam()) {
+      gsg_cat.spam() << "Setting GSG state to:\n";
+      state->write(gsg_cat.spam(false), 2);
+    }
 #endif
 #endif
-  _state = _state->issue_delta_set(state, this);
-  finish_modify_state();
+    _state_pcollector.add_level(1);
+    _state = _state->issue_delta_set(state, this);
+    finish_modify_state();
+  }
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
@@ -286,6 +292,7 @@ set_state(const RenderState *state) {
 INLINE void GraphicsStateGuardian::
 INLINE void GraphicsStateGuardian::
 set_transform(const TransformState *transform) {
 set_transform(const TransformState *transform) {
   if (transform != _transform) {
   if (transform != _transform) {
+    _state_pcollector.add_level(1);
     _transform = transform;
     _transform = transform;
     issue_transform(transform);
     issue_transform(transform);
   }
   }

+ 2 - 3
panda/src/display/graphicsStateGuardian.cxx

@@ -55,9 +55,9 @@ PStatCollector GraphicsStateGuardian::_vertices_tristrip_pcollector("Vertices:Tr
 PStatCollector GraphicsStateGuardian::_vertices_trifan_pcollector("Vertices:Triangle fans");
 PStatCollector GraphicsStateGuardian::_vertices_trifan_pcollector("Vertices:Triangle fans");
 PStatCollector GraphicsStateGuardian::_vertices_tri_pcollector("Vertices:Triangles");
 PStatCollector GraphicsStateGuardian::_vertices_tri_pcollector("Vertices:Triangles");
 PStatCollector GraphicsStateGuardian::_vertices_other_pcollector("Vertices:Other");
 PStatCollector GraphicsStateGuardian::_vertices_other_pcollector("Vertices:Other");
+PStatCollector GraphicsStateGuardian::_state_pcollector("State changes");
 PStatCollector GraphicsStateGuardian::_transform_state_pcollector("State changes:Transforms");
 PStatCollector GraphicsStateGuardian::_transform_state_pcollector("State changes:Transforms");
 PStatCollector GraphicsStateGuardian::_texture_state_pcollector("State changes:Textures");
 PStatCollector GraphicsStateGuardian::_texture_state_pcollector("State changes:Textures");
-PStatCollector GraphicsStateGuardian::_other_state_pcollector("State changes:Other");
 PStatCollector GraphicsStateGuardian::_draw_primitive_pcollector("Draw:Primitive");
 PStatCollector GraphicsStateGuardian::_draw_primitive_pcollector("Draw:Primitive");
 PStatCollector GraphicsStateGuardian::_clear_pcollector("Draw:Clear");
 PStatCollector GraphicsStateGuardian::_clear_pcollector("Draw:Clear");
 PStatCollector GraphicsStateGuardian::_flush_pcollector("Draw:Flush");
 PStatCollector GraphicsStateGuardian::_flush_pcollector("Draw:Flush");
@@ -233,7 +233,6 @@ release_geom(GeomContext *) {
 void GraphicsStateGuardian::
 void GraphicsStateGuardian::
 set_state_and_transform(const RenderState *state,
 set_state_and_transform(const RenderState *state,
                         const TransformState *transform) {
                         const TransformState *transform) {
-
   set_transform(transform);
   set_transform(transform);
   set_state(state);
   set_state(state);
 }
 }
@@ -1246,9 +1245,9 @@ init_frame_pstats() {
     _vertices_tri_pcollector.clear_level();
     _vertices_tri_pcollector.clear_level();
     _vertices_other_pcollector.clear_level();
     _vertices_other_pcollector.clear_level();
     
     
+    _state_pcollector.clear_level();
     _transform_state_pcollector.clear_level();
     _transform_state_pcollector.clear_level();
     _texture_state_pcollector.clear_level();
     _texture_state_pcollector.clear_level();
-    _other_state_pcollector.clear_level();
   }
   }
 }
 }
 
 

+ 1 - 1
panda/src/display/graphicsStateGuardian.h

@@ -293,9 +293,9 @@ public:
   static PStatCollector _vertices_trifan_pcollector;
   static PStatCollector _vertices_trifan_pcollector;
   static PStatCollector _vertices_tri_pcollector;
   static PStatCollector _vertices_tri_pcollector;
   static PStatCollector _vertices_other_pcollector;
   static PStatCollector _vertices_other_pcollector;
+  static PStatCollector _state_pcollector;
   static PStatCollector _transform_state_pcollector;
   static PStatCollector _transform_state_pcollector;
   static PStatCollector _texture_state_pcollector;
   static PStatCollector _texture_state_pcollector;
-  static PStatCollector _other_state_pcollector;
   static PStatCollector _draw_primitive_pcollector;
   static PStatCollector _draw_primitive_pcollector;
   static PStatCollector _clear_pcollector;
   static PStatCollector _clear_pcollector;
   static PStatCollector _flush_pcollector;
   static PStatCollector _flush_pcollector;