better pipelined animation (still needs work)

This commit is contained in:
David Rose 2006-02-15 21:44:08 +00:00
parent c251c7c484
commit 11337e4c20
4 changed files with 26 additions and 7 deletions

View File

@ -42,6 +42,7 @@
#include "textureContext.h" #include "textureContext.h"
#include "shaderExpansion.h" #include "shaderExpansion.h"
#include "shaderContext.h" #include "shaderContext.h"
#include "transformBlend.h"
#include "transformBlendTable.h" #include "transformBlendTable.h"
#include "transformTable.h" #include "transformTable.h"
#include "userVertexSlider.h" #include "userVertexSlider.h"
@ -255,6 +256,7 @@ ConfigureFn(config_gobj) {
TextureStage::init_type(); TextureStage::init_type();
ShaderExpansion::init_type(); ShaderExpansion::init_type();
ShaderContext::init_type(); ShaderContext::init_type();
TransformBlend::init_type();
TransformBlendTable::init_type(); TransformBlendTable::init_type();
TransformTable::init_type(); TransformTable::init_type();
UserVertexSlider::init_type(); UserVertexSlider::init_type();

View File

@ -212,7 +212,7 @@ INLINE void TransformBlend::
update_blend() const { update_blend() const {
CDReader cdata(_cycler); CDReader cdata(_cycler);
if (cdata->_global_modified != VertexTransform::get_global_modified()) { 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); ((TransformBlend *)this)->recompute_result(cdataw);
} }
} }
@ -295,7 +295,7 @@ INLINE UpdateSeq TransformBlend::
get_modified() const { get_modified() const {
CDReader cdata(_cycler); CDReader cdata(_cycler);
if (cdata->_global_modified != VertexTransform::get_global_modified()) { 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); ((TransformBlend *)this)->recompute_result(cdataw);
return cdataw->_modified; return cdataw->_modified;
} else { } else {

View File

@ -21,6 +21,7 @@
#include "bamReader.h" #include "bamReader.h"
#include "bamWriter.h" #include "bamWriter.h"
TypeHandle TransformBlend::_type_handle;
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: TransformBlend::compare_to // Function: TransformBlend::compare_to
@ -201,7 +202,7 @@ write(ostream &out, int indent_level) const {
// VertexTransform objects, if necessary. // VertexTransform objects, if necessary.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void TransformBlend:: void TransformBlend::
recompute_result(TransformBlend::CDWriter &cdata) { recompute_result(CData *cdata) {
// Update the global_modified sequence number first, to prevent race // Update the global_modified sequence number first, to prevent race
// conditions. // conditions.
cdata->_global_modified = VertexTransform::get_global_modified(); cdata->_global_modified = VertexTransform::get_global_modified();
@ -235,7 +236,7 @@ recompute_result(TransformBlend::CDWriter &cdata) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void TransformBlend:: void TransformBlend::
clear_result() { clear_result() {
CDWriter cdata(_cycler); CDWriter cdata(_cycler, true);
cdata->_global_modified = UpdateSeq(); cdata->_global_modified = UpdateSeq();
if (cdata->_modified != UpdateSeq()) { if (cdata->_modified != UpdateSeq()) {
cdata->_modified = UpdateSeq(); cdata->_modified = UpdateSeq();

View File

@ -82,6 +82,11 @@ PUBLISHED:
void write(ostream &out, int indent_level) const; void write(ostream &out, int indent_level) const;
private: private:
class CData;
void recompute_result(CData *cdata);
void clear_result();
class TransformEntry { class TransformEntry {
public: public:
INLINE bool operator < (const TransformEntry &other) const; INLINE bool operator < (const TransformEntry &other) const;
@ -99,6 +104,9 @@ private:
INLINE CData(); INLINE CData();
INLINE CData(const CData &copy); INLINE CData(const CData &copy);
virtual CycleData *make_copy() const; virtual CycleData *make_copy() const;
virtual TypeHandle get_parent_type() const {
return TransformBlend::get_class_type();
}
LMatrix4f _result; LMatrix4f _result;
UpdateSeq _modified; UpdateSeq _modified;
@ -109,15 +117,23 @@ private:
typedef CycleDataReader<CData> CDReader; typedef CycleDataReader<CData> CDReader;
typedef CycleDataWriter<CData> CDWriter; typedef CycleDataWriter<CData> CDWriter;
void recompute_result(CDWriter &cdata);
void clear_result();
public: public:
void write_datagram(BamWriter *manager, Datagram &dg) const; void write_datagram(BamWriter *manager, Datagram &dg) const;
int complete_pointers(TypedWritable **plist, BamReader *manager); int complete_pointers(TypedWritable **plist, BamReader *manager);
void fillin(DatagramIterator &scan, BamReader *manager); void fillin(DatagramIterator &scan, BamReader *manager);
friend class VertexTransform; 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); INLINE ostream &operator << (ostream &out, const TransformBlend &obj);