pipeline animated blends, etc. better

This commit is contained in:
David Rose 2006-02-16 21:14:55 +00:00
parent f0e9f34908
commit 0e55bc8b2c
10 changed files with 16 additions and 24 deletions

View File

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

View File

@ -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 {

View File

@ -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);
}
////////////////////////////////////////////////////////////////////

View File

@ -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;
};

View File

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

View File

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

View File

@ -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();
}

View File

@ -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;

View File

@ -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);

View File

@ -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;