浏览代码

pipeline animated blends, etc. better

David Rose 20 年之前
父节点
当前提交
0e55bc8b2c

+ 1 - 1
panda/src/gobj/sliderTable.I

@@ -144,7 +144,7 @@ get_modified() const {
 ////////////////////////////////////////////////////////////////////
 INLINE void SliderTable::
 update_modified(UpdateSeq modified) {
-  CDWriter cdata(_cycler);
+  CDWriter cdata(_cycler, true);
   cdata->_modified = modified;
 }
 

+ 1 - 1
panda/src/gobj/transformBlendTable.I

@@ -50,7 +50,7 @@ INLINE UpdateSeq TransformBlendTable::
 get_modified() const {
   CDReader cdata(_cycler);
   if (cdata->_global_modified != VertexTransform::get_global_modified()) {
-    CDWriter cdataw(((TransformBlendTable *)this)->_cycler, cdata);
+    CDWriter cdataw(((TransformBlendTable *)this)->_cycler, cdata, false);
     ((TransformBlendTable *)this)->recompute_modified(cdataw);
     return cdataw->_modified;
   } else {

+ 2 - 4
panda/src/gobj/transformBlendTable.cxx

@@ -22,7 +22,6 @@
 #include "bamWriter.h"
 
 TypeHandle TransformBlendTable::_type_handle;
-TypeHandle TransformBlendTable::_palette_type_handle;
 
 ////////////////////////////////////////////////////////////////////
 //     Function: TransformBlendTable::Constructor
@@ -175,7 +174,7 @@ rebuild_index() {
 //               TransformBlend objects, if necessary.
 ////////////////////////////////////////////////////////////////////
 void TransformBlendTable::
-recompute_modified(TransformBlendTable::CDWriter &cdata) {
+recompute_modified(TransformBlendTable::CData *cdata) {
   // Update the global_modified sequence number first, to prevent race
   // conditions.
   cdata->_global_modified = VertexTransform::get_global_modified();
@@ -198,7 +197,7 @@ recompute_modified(TransformBlendTable::CDWriter &cdata) {
 ////////////////////////////////////////////////////////////////////
 void TransformBlendTable::
 clear_modified() {
-  CDWriter cdata(_cycler);
+  CDWriter cdata(_cycler, true);
   cdata->_global_modified = UpdateSeq();
   cdata->_modified = UpdateSeq();
 }
@@ -212,7 +211,6 @@ clear_modified() {
 void TransformBlendTable::
 register_with_read_factory() {
   BamReader::get_factory()->register_factory(get_class_type(), make_from_bam);
-  BamReader::get_factory()->register_factory(_palette_type_handle, make_from_bam);
 }
 
 ////////////////////////////////////////////////////////////////////

+ 6 - 9
panda/src/gobj/transformBlendTable.h

@@ -38,7 +38,7 @@
 //               combinations of transforms and blend amounts used by
 //               a GeomVertexData, to facilitate computing dynamic
 //               vertices on the CPU at runtime.  Each vertex has a
-//               pointer to exactly one of entries in this table,
+//               pointer to exactly one of the entries in this table,
 //               and each entry defines a number of transform/blend
 //               combinations.
 //
@@ -68,10 +68,15 @@ PUBLISHED:
   void write(ostream &out, int indent_level) const;
 
 private:
+  class CData;
+
   void clear_index();
   INLINE void consider_rebuild_index() const;
   void rebuild_index();
 
+  void recompute_modified(CData *cdata);
+  void clear_modified();
+
 private:
   // We don't bother with registering the table, or protecting its
   // data in a CycleData structure--the interface on GeomVertexData
@@ -111,9 +116,6 @@ private:
   typedef CycleDataReader<CData> CDReader;
   typedef CycleDataWriter<CData> CDWriter;
 
-  void recompute_modified(CDWriter &cdata);
-  void clear_modified();
-
 public:
   static void register_with_read_factory();
   virtual void write_datagram(BamWriter *manager, Datagram &dg);
@@ -131,10 +133,6 @@ public:
     TypedWritableReferenceCount::init_type();
     register_type(_type_handle, "TransformBlendTable",
                   TypedWritableReferenceCount::get_class_type());
-    // The _palette_type_handle is defined only to support older bam
-    // files, generated before we renamed the type to TransformBlendTable.
-    register_type(_palette_type_handle, "TransformBlendPalette",
-                  TypedWritableReferenceCount::get_class_type());
   }
   virtual TypeHandle get_type() const {
     return get_class_type();
@@ -143,7 +141,6 @@ public:
 
 private:
   static TypeHandle _type_handle;
-  static TypeHandle _palette_type_handle;
 
   friend class VertexTransform;
 };

+ 1 - 1
panda/src/gobj/transformTable.I

@@ -106,7 +106,7 @@ get_modified() const {
 ////////////////////////////////////////////////////////////////////
 INLINE void TransformTable::
 update_modified(UpdateSeq modified) {
-  CDWriter cdata(_cycler);
+  CDWriter cdata(_cycler, true);
   cdata->_modified = modified;
 }
 

+ 1 - 1
panda/src/gobj/userVertexSlider.I

@@ -24,7 +24,7 @@
 ////////////////////////////////////////////////////////////////////
 INLINE void UserVertexSlider::
 set_slider(float slider) {
-  CDWriter cdata(_cycler);
+  CDWriter cdata(_cycler, true);
   cdata->_slider = slider;
   mark_modified();
 }

+ 1 - 1
panda/src/gobj/userVertexTransform.I

@@ -35,7 +35,7 @@ get_name() const {
 ////////////////////////////////////////////////////////////////////
 INLINE void UserVertexTransform::
 set_matrix(const LMatrix4f &matrix) {
-  CDWriter cdata(_cycler);
+  CDWriter cdata(_cycler, true);
   cdata->_matrix = matrix;
   mark_modified();
 }

+ 1 - 1
panda/src/gobj/vertexSlider.cxx

@@ -76,7 +76,7 @@ write(ostream &out, int indent_level) const {
 ////////////////////////////////////////////////////////////////////
 void VertexSlider::
 mark_modified() {
-  CDWriter cdata(_cycler);
+  CDWriter cdata(_cycler, true);
   cdata->_modified = VertexTransform::get_next_modified();
   
   Tables::iterator ti;

+ 0 - 3
panda/src/gobj/vertexSlider.h

@@ -85,9 +85,6 @@ private:
   typedef CycleDataReader<CData> CDReader;
   typedef CycleDataWriter<CData> CDWriter;
 
-  static PipelineCycler<CData> _global_cycler;
-  static UpdateSeq _next_modified;
-
 public:
   virtual void write_datagram(BamWriter *manager, Datagram &dg);
 

+ 2 - 2
panda/src/gobj/vertexTransform.cxx

@@ -141,7 +141,7 @@ UpdateSeq VertexTransform::
 get_next_modified() {
   ++_next_modified;
 
-  CDWriter cdatag(_global_cycler);
+  CDWriter cdatag(_global_cycler, true);
   cdatag->_modified = _next_modified;
 
   return _next_modified;
@@ -157,7 +157,7 @@ get_next_modified() {
 ////////////////////////////////////////////////////////////////////
 void VertexTransform::
 mark_modified() {
-  CDWriter cdata(_cycler);
+  CDWriter cdata(_cycler, true);
   cdata->_modified = get_next_modified();
   
   Palettes::iterator pi;