mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -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 "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();
|
||||
|
@ -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 {
|
||||
|
@ -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();
|
||||
|
@ -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<CData> CDReader;
|
||||
typedef CycleDataWriter<CData> 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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user