From 0e55bc8b2c338716a43311b1ba931a941dfe690a Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 16 Feb 2006 21:14:55 +0000 Subject: [PATCH] pipeline animated blends, etc. better --- panda/src/gobj/sliderTable.I | 2 +- panda/src/gobj/transformBlendTable.I | 2 +- panda/src/gobj/transformBlendTable.cxx | 6 ++---- panda/src/gobj/transformBlendTable.h | 15 ++++++--------- panda/src/gobj/transformTable.I | 2 +- panda/src/gobj/userVertexSlider.I | 2 +- panda/src/gobj/userVertexTransform.I | 2 +- panda/src/gobj/vertexSlider.cxx | 2 +- panda/src/gobj/vertexSlider.h | 3 --- panda/src/gobj/vertexTransform.cxx | 4 ++-- 10 files changed, 16 insertions(+), 24 deletions(-) diff --git a/panda/src/gobj/sliderTable.I b/panda/src/gobj/sliderTable.I index f8f8bbc398..12fad5dc33 100644 --- a/panda/src/gobj/sliderTable.I +++ b/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; } diff --git a/panda/src/gobj/transformBlendTable.I b/panda/src/gobj/transformBlendTable.I index d2a295b6f5..23f36e717f 100644 --- a/panda/src/gobj/transformBlendTable.I +++ b/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 { diff --git a/panda/src/gobj/transformBlendTable.cxx b/panda/src/gobj/transformBlendTable.cxx index 6ca53a0781..1ac36e39fd 100644 --- a/panda/src/gobj/transformBlendTable.cxx +++ b/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); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/gobj/transformBlendTable.h b/panda/src/gobj/transformBlendTable.h index 0c0869de14..266d4bd007 100644 --- a/panda/src/gobj/transformBlendTable.h +++ b/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 CDReader; typedef CycleDataWriter 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; }; diff --git a/panda/src/gobj/transformTable.I b/panda/src/gobj/transformTable.I index 409995fe5f..ccbe49f2f4 100644 --- a/panda/src/gobj/transformTable.I +++ b/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; } diff --git a/panda/src/gobj/userVertexSlider.I b/panda/src/gobj/userVertexSlider.I index 2dbfed6d9f..3648f6bf70 100644 --- a/panda/src/gobj/userVertexSlider.I +++ b/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(); } diff --git a/panda/src/gobj/userVertexTransform.I b/panda/src/gobj/userVertexTransform.I index e974ee9b90..d9dbbe6ccd 100644 --- a/panda/src/gobj/userVertexTransform.I +++ b/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(); } diff --git a/panda/src/gobj/vertexSlider.cxx b/panda/src/gobj/vertexSlider.cxx index bca24b61ef..019aebe75a 100644 --- a/panda/src/gobj/vertexSlider.cxx +++ b/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; diff --git a/panda/src/gobj/vertexSlider.h b/panda/src/gobj/vertexSlider.h index 10a76806a2..f1aa2602ba 100644 --- a/panda/src/gobj/vertexSlider.h +++ b/panda/src/gobj/vertexSlider.h @@ -85,9 +85,6 @@ private: typedef CycleDataReader CDReader; typedef CycleDataWriter CDWriter; - static PipelineCycler _global_cycler; - static UpdateSeq _next_modified; - public: virtual void write_datagram(BamWriter *manager, Datagram &dg); diff --git a/panda/src/gobj/vertexTransform.cxx b/panda/src/gobj/vertexTransform.cxx index a8b3c3171c..3821be567e 100644 --- a/panda/src/gobj/vertexTransform.cxx +++ b/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;