diff --git a/panda/src/gobj/config_gobj.cxx b/panda/src/gobj/config_gobj.cxx index 075048d731..06b9a4dff3 100644 --- a/panda/src/gobj/config_gobj.cxx +++ b/panda/src/gobj/config_gobj.cxx @@ -42,6 +42,7 @@ #include "textureContext.h" #include "shaderExpansion.h" #include "shaderContext.h" +#include "transformBlend.h" #include "transformBlendTable.h" #include "transformTable.h" #include "userVertexSlider.h" @@ -255,6 +256,7 @@ ConfigureFn(config_gobj) { TextureStage::init_type(); ShaderExpansion::init_type(); ShaderContext::init_type(); + TransformBlend::init_type(); TransformBlendTable::init_type(); TransformTable::init_type(); UserVertexSlider::init_type(); diff --git a/panda/src/gobj/transformBlend.I b/panda/src/gobj/transformBlend.I index 8c907ccef6..3212042975 100644 --- a/panda/src/gobj/transformBlend.I +++ b/panda/src/gobj/transformBlend.I @@ -212,7 +212,7 @@ INLINE void TransformBlend:: update_blend() const { CDReader cdata(_cycler); if (cdata->_global_modified != VertexTransform::get_global_modified()) { - CDWriter cdataw(((TransformBlend *)this)->_cycler, cdata); + CDWriter cdataw(((TransformBlend *)this)->_cycler, cdata, false); ((TransformBlend *)this)->recompute_result(cdataw); } } @@ -295,7 +295,7 @@ INLINE UpdateSeq TransformBlend:: get_modified() const { CDReader cdata(_cycler); if (cdata->_global_modified != VertexTransform::get_global_modified()) { - CDWriter cdataw(((TransformBlend *)this)->_cycler, cdata); + CDWriter cdataw(((TransformBlend *)this)->_cycler, cdata, false); ((TransformBlend *)this)->recompute_result(cdataw); return cdataw->_modified; } else { diff --git a/panda/src/gobj/transformBlend.cxx b/panda/src/gobj/transformBlend.cxx index db30ba1d0b..e3f07c6130 100644 --- a/panda/src/gobj/transformBlend.cxx +++ b/panda/src/gobj/transformBlend.cxx @@ -21,6 +21,7 @@ #include "bamReader.h" #include "bamWriter.h" +TypeHandle TransformBlend::_type_handle; //////////////////////////////////////////////////////////////////// // Function: TransformBlend::compare_to @@ -201,7 +202,7 @@ write(ostream &out, int indent_level) const { // VertexTransform objects, if necessary. //////////////////////////////////////////////////////////////////// void TransformBlend:: -recompute_result(TransformBlend::CDWriter &cdata) { +recompute_result(CData *cdata) { // Update the global_modified sequence number first, to prevent race // conditions. cdata->_global_modified = VertexTransform::get_global_modified(); @@ -235,7 +236,7 @@ recompute_result(TransformBlend::CDWriter &cdata) { //////////////////////////////////////////////////////////////////// void TransformBlend:: clear_result() { - CDWriter cdata(_cycler); + CDWriter cdata(_cycler, true); cdata->_global_modified = UpdateSeq(); if (cdata->_modified != UpdateSeq()) { cdata->_modified = UpdateSeq(); diff --git a/panda/src/gobj/transformBlend.h b/panda/src/gobj/transformBlend.h index 08baa1d465..ceed374a04 100644 --- a/panda/src/gobj/transformBlend.h +++ b/panda/src/gobj/transformBlend.h @@ -82,6 +82,11 @@ PUBLISHED: void write(ostream &out, int indent_level) const; private: + class CData; + + void recompute_result(CData *cdata); + void clear_result(); + class TransformEntry { public: INLINE bool operator < (const TransformEntry &other) const; @@ -99,6 +104,9 @@ private: INLINE CData(); INLINE CData(const CData ©); virtual CycleData *make_copy() const; + virtual TypeHandle get_parent_type() const { + return TransformBlend::get_class_type(); + } LMatrix4f _result; UpdateSeq _modified; @@ -109,15 +117,23 @@ private: typedef CycleDataReader CDReader; typedef CycleDataWriter CDWriter; - void recompute_result(CDWriter &cdata); - void clear_result(); - public: void write_datagram(BamWriter *manager, Datagram &dg) const; int complete_pointers(TypedWritable **plist, BamReader *manager); void fillin(DatagramIterator &scan, BamReader *manager); friend class VertexTransform; + +public: + static TypeHandle get_class_type() { + return _type_handle; + } + static void init_type() { + register_type(_type_handle, "TransformBlend"); + } + +private: + static TypeHandle _type_handle; }; INLINE ostream &operator << (ostream &out, const TransformBlend &obj);