mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
better pipelined animation (still needs work)
This commit is contained in:
parent
c251c7c484
commit
11337e4c20
@ -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();
|
||||||
|
@ -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 {
|
||||||
|
@ -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();
|
||||||
|
@ -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 ©);
|
INLINE CData(const CData ©);
|
||||||
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user