21 INLINE TransformBlend::
30 INLINE TransformBlend::
40 INLINE TransformBlend::
53 INLINE TransformBlend::
68 INLINE TransformBlend::
85 INLINE TransformBlend::
87 _entries(copy._entries)
96 INLINE
void TransformBlend::
98 _entries = copy._entries;
100 clear_result(current_thread);
108 INLINE TransformBlend::
117 INLINE
bool TransformBlend::
127 INLINE
bool TransformBlend::
137 INLINE
bool TransformBlend::
150 return _entries.
size();
161 nassertr(n >= 0 && n < (
int)_entries.
size(), NULL);
162 return _entries[n]._transform;
173 nassertr(n >= 0 && n < (
int)_entries.
size(), 0.0f);
174 return _entries[n]._weight;
185 nassertv(n >= 0 && n < (
int)_entries.
size());
186 _entries[n]._transform = transform;
197 nassertv(n >= 0 && n < (
int)_entries.
size());
198 _entries[n]._weight = weight;
213 ((
TransformBlend *)
this)->recompute_result(cdataw, current_thread);
229 CDReader cdata(_cycler, current_thread);
230 result = cdata->_result;
243 if (!_entries.
empty()) {
244 CDReader cdata(_cycler, current_thread);
245 point = point * cdata->_result;
259 if (!_entries.
empty()) {
260 CDReader cdata(_cycler, current_thread);
261 point = point * cdata->_result;
275 if (!_entries.
empty()) {
276 CDReader cdata(_cycler, current_thread);
277 vector = vector * cdata->_result;
281 #ifndef STDFLOAT_DOUBLE 292 if (!_entries.
empty()) {
293 CDReader cdata(_cycler, current_thread);
294 point = point * LCAST(
double, cdata->_result);
297 #else // STDFLOAT_DOUBLE 308 if (!_entries.
empty()) {
309 CDReader cdata(_cycler, current_thread);
310 point = point * LCAST(
float, cdata->_result);
313 #endif // STDFLOAT_DOUBLE 315 #ifndef STDFLOAT_DOUBLE 326 if (!_entries.
empty()) {
327 CDReader cdata(_cycler, current_thread);
328 point = point * LCAST(
double, cdata->_result);
331 #else // STDFLOAT_DOUBLE 342 if (!_entries.
empty()) {
343 CDReader cdata(_cycler, current_thread);
344 point = point * LCAST(
float, cdata->_result);
347 #endif // STDFLOAT_DOUBLE 349 #ifndef STDFLOAT_DOUBLE 360 if (!_entries.
empty()) {
361 CDReader cdata(_cycler, current_thread);
362 vector = vector * LCAST(
double, cdata->_result);
365 #else // STDFLOAT_DOUBLE 376 if (!_entries.
empty()) {
377 CDReader cdata(_cycler, current_thread);
378 vector = vector * LCAST(
float, cdata->_result);
381 #endif // STDFLOAT_DOUBLE 394 ((
TransformBlend *)
this)->recompute_result(cdataw, current_thread);
395 return cdataw->_modified;
397 return cdata->_modified;
409 INLINE
bool TransformBlend::TransformEntry::
410 operator < (
const TransformBlend::TransformEntry &other)
const {
411 return _transform < other._transform;
419 INLINE TransformBlend::CData::
430 INLINE TransformBlend::CData::
431 CData(
const TransformBlend::CData ©) :
432 _result(copy._result),
433 _modified(copy._modified),
434 _global_modified(copy._global_modified)
static const LMatrix4f & ident_mat()
Returns an identity matrix.
size_type_0 size() const
Returns the number of elements in the ordered vector.
This is a four-component point in space.
This is a three-component vector distance (as opposed to a three-component point, which represents a ...
This is a three-component point in space (as opposed to a three-component vector, which represents a ...
bool empty() const
Returns true if the ordered vector is empty, false otherwise.
static Thread * get_current_thread()
Returns a pointer to the currently-executing Thread object.
This template class calls PipelineCycler::read_unlocked(), and then provides a transparent read-only ...
This is a 4-by-4 transform matrix.
This template class calls PipelineCycler::read() in the constructor and PipelineCycler::release_read(...
This template class calls PipelineCycler::write() in the constructor and PipelineCycler::release_writ...
This is a three-component vector distance (as opposed to a three-component point, which represents a ...
This is a three-component point in space (as opposed to a three-component vector, which represents a ...
This is a four-component point in space.
A thread; that is, a lightweight process.
This is a sequence number that increments monotonically.