|
Panda3D
|
This represents a unique collection of RenderEffect objects that correspond to a particular renderable state. More...
#include "renderEffects.h"
Public Member Functions | |
| RenderEffects (const RenderEffects ©)=delete | |
| virtual | ~RenderEffects () |
| The destructor is responsible for removing the RenderEffects from the global set if it is there. | |
| ConstPointerTo< RenderEffects > | add_effect (const RenderEffect *effect) const |
| Returns a new RenderEffects object that represents the same as the source state, with the new RenderEffect added. | |
| void | adjust_transform (ConstPointerTo< TransformState > &net_transform, ConstPointerTo< TransformState > &node_transform, const PandaNode *node) const |
| Calls adjust_transform() on all effects. | |
| virtual int | complete_pointers (TypedWritable **plist, BamReader *manager) |
| Receives an array of pointers, one for each time manager->read_pointer() was called in fillin(). | |
| void | cull_callback (CullTraverser *trav, CullTraverserData &data, ConstPointerTo< TransformState > &node_transform, ConstPointerTo< RenderState > &node_state) const |
| Calls cull_callback() on all effects. | |
| virtual void | finalize (BamReader *manager) |
| Called by the BamReader to perform any final actions needed for setting up the object after all objects have been read and all pointers have been completed. | |
| int | find_effect (TypeHandle type) const |
| Searches for an effect with the indicated type in the state, and returns its index if it is found, or -1 if it is not. | |
| virtual TypeHandle | force_init_type () |
| const RenderEffect * | get_effect (size_t n) const |
| Returns the nth effect in the state. | |
| const RenderEffect * | get_effect (TypeHandle type) const |
| Looks for a RenderEffect of the indicated type in the state, and returns it if it is found, or NULL if it is not. | |
| size_t | get_num_effects () const |
| Returns the number of separate effects indicated in the state. | |
| virtual TypeHandle | get_type () const |
| bool | has_adjust_transform () const |
| This function is provided as an optimization, to speed up the render-time checking for the existance of an effect with a compute_adjust_transform on this state. | |
| bool | has_cull_callback () const |
| This function is provided as an optimization, to speed up the render-time checking for the existance of an effect with a cull_callback on this state. | |
| bool | has_decal () const |
| This function is provided as an optimization, to speed up the render-time checking for the existance of a DecalEffect on this state. | |
| bool | has_show_bounds () const |
| This function is provided as an optimization, to speed up the render-time checking for the existance of a ShowBoundsEffect on this state. | |
| bool | has_show_tight_bounds () const |
| If has_show_bounds() returns true, this will return true if the ShowBoundsEffect in question requests showing a "tight" bound. | |
| bool | is_empty () const |
| Returns true if the state is empty, false otherwise. | |
| bool | operator< (const RenderEffects &other) const |
| Provides an arbitrary ordering among all unique RenderEffects, so we can store the essentially different ones in a big set and throw away the rest. | |
| RenderEffects & | operator= (const RenderEffects ©)=delete |
| const RenderEffect * | operator[] (size_t n) const |
| Returns the nth effect in the state. | |
| const RenderEffect * | operator[] (TypeHandle type) const |
| Returns the effect in the state with the given type. | |
| void | output (std::ostream &out) const |
| virtual ConstPointerTo< TransformState > | prepare_flatten_transform (const TransformState *net_transform) const |
| Preprocesses the accumulated transform that is about to be applied to (or through) this node due to a flatten operation. | |
| ConstPointerTo< RenderEffects > | remove_effect (TypeHandle type) const |
| Returns a new RenderEffects object that represents the same as the source state, with the indicated RenderEffect removed. | |
| virtual bool | require_fully_complete () const |
| Some objects require all of their nested pointers to have been completed before the objects themselves can be completed. | |
| bool | safe_to_combine () const |
| Returns true if all of the effects in this set can safely be shared with a sibling node that has the exact same set of effects, or false if this would be bad for any of the effects. | |
| bool | safe_to_transform () const |
| Returns true if all of the effects in this set can safely be transformed, and therefore the complete set can be transformed, by calling xform(). | |
| size_t | size () const |
| Returns the number of separate effects indicated in the state. | |
| virtual bool | unref () const |
| This method overrides ReferenceCount::unref() to check whether the remaining reference count is entirely in the cache, and if so, it checks for and breaks a cycle in the cache involving this object. | |
| void | write (std::ostream &out, int indent_level) const |
| virtual void | write_datagram (BamWriter *manager, Datagram &dg) |
| Writes the contents of this object to the datagram for shipping out to a Bam file. | |
| ConstPointerTo< RenderEffects > | xform (const LMatrix4 &mat) const |
| Returns a new RenderEffects transformed by the indicated matrix. | |
Public Member Functions inherited from TypedWritableReferenceCount | |
| TypedWritableReferenceCount (const TypedWritableReferenceCount ©) | |
| virtual ReferenceCount * | as_reference_count () |
| Returns the pointer cast to a ReferenceCount pointer, if it is in fact of that type. | |
| void | operator= (const TypedWritableReferenceCount ©) |
Public Member Functions inherited from TypedWritable | |
| TypedWritable (const TypedWritable ©) | |
| vector_uchar | encode_to_bam_stream () const |
| Converts the TypedWritable object into a single stream of data using a BamWriter, and returns that data as a bytes object. | |
| bool | encode_to_bam_stream (vector_uchar &data, BamWriter *writer=nullptr) const |
| Converts the TypedWritable object into a single stream of data using a BamWriter, and stores that data in the indicated string. | |
| UpdateSeq | get_bam_modified () const |
| Returns the current bam_modified counter. | |
| void | mark_bam_modified () |
| Increments the bam_modified counter, so that this object will be invalidated and retransmitted on any open bam streams. | |
| void | operator= (const TypedWritable ©) |
| virtual void | update_bam_nested (BamWriter *manager) |
| Called by the BamWriter when this object has not itself been modified recently, but it should check its nested objects for updates. | |
Public Member Functions inherited from TypedObject | |
| TypedObject (const TypedObject ©)=default | |
| TypedObject * | as_typed_object () |
| Returns the object, upcast (if necessary) to a TypedObject pointer. | |
| const TypedObject * | as_typed_object () const |
| Returns the object, upcast (if necessary) to a TypedObject pointer. | |
| int | get_best_parent_from_Set (const std::set< int > &) const |
| int | get_type_index () const |
| Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. | |
| bool | is_exact_type (TypeHandle handle) const |
| Returns true if the current object is the indicated type exactly. | |
| bool | is_of_type (TypeHandle handle) const |
| Returns true if the current object is or derives from the indicated type. | |
| TypedObject & | operator= (const TypedObject ©)=default |
Public Member Functions inherited from MemoryBase | |
| void | operator delete (void *, void *) |
| void | operator delete (void *ptr) |
| void | operator delete[] (void *, void *) |
| void | operator delete[] (void *ptr) |
| void * | operator new (size_t size) |
| void * | operator new (size_t size, void *ptr) |
| void * | operator new[] (size_t size) |
| void * | operator new[] (size_t size, void *ptr) |
Public Member Functions inherited from ReferenceCount | |
| int | get_ref_count () const |
| WeakReferenceList * | get_weak_list () const |
| Returns the WeakReferenceList associated with this ReferenceCount object. | |
| bool | has_weak_list () const |
| Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise. | |
| void | local_object () |
| This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack. | |
| void | ref () const |
| Explicitly increments the reference count. | |
| bool | ref_if_nonzero () const |
| Atomically increases the reference count of this object if it is not zero. | |
| bool | test_ref_count_integrity () const |
| Does some easy checks to make sure that the reference count isn't completely bogus. | |
| bool | test_ref_count_nonzero () const |
| Does some easy checks to make sure that the reference count isn't zero, or completely bogus. | |
| bool | unref_if_one () const |
| Atomically decreases the reference count of this object if it is one. | |
| WeakReferenceList * | weak_ref () |
| Adds the indicated PointerToVoid as a weak reference to this object. | |
| void | weak_unref () |
| Removes the indicated PointerToVoid as a weak reference to this object. | |
Static Public Member Functions | |
| static TypedWritable * | change_this (TypedWritable *old_ptr, BamReader *manager) |
| Called immediately after complete_pointers(), this gives the object a chance to adjust its own pointer if desired. | |
| static TypeHandle | get_class_type () |
| static int | get_num_states () |
| Returns the total number of unique RenderEffects objects allocated in the world. | |
| static void | init_states () |
| Make sure the global _states map is allocated. | |
| static void | init_type () |
| static void | list_states (std::ostream &out) |
| Lists all of the RenderEffects in the cache to the output stream, one per line. | |
| static ConstPointerTo< RenderEffects > | make (const RenderEffect *effect) |
| Returns a RenderEffects with one effect set. | |
| static ConstPointerTo< RenderEffects > | make (const RenderEffect *effect1, const RenderEffect *effect2) |
| Returns a RenderEffects with two effects set. | |
| static ConstPointerTo< RenderEffects > | make (const RenderEffect *effect1, const RenderEffect *effect2, const RenderEffect *effect3) |
| Returns a RenderEffects with three effects set. | |
| static ConstPointerTo< RenderEffects > | make (const RenderEffect *effect1, const RenderEffect *effect2, const RenderEffect *effect3, const RenderEffect *effect4) |
| Returns a RenderEffects with four effects set. | |
| static ConstPointerTo< RenderEffects > | make_empty () |
| Returns a RenderEffects with no effects set. | |
| static void | register_with_read_factory () |
| Tells the BamReader how to create objects of type RenderEffects. | |
| static bool | validate_states () |
| Ensures that the cache is still stored in sorted order. | |
Static Public Member Functions inherited from TypedWritableReferenceCount | |
| static TypeHandle | get_class_type () |
| static void | init_type () |
| static | PT (TypedWritableReferenceCount) decode_from_bam_stream(vector_uchar data |
Static Public Member Functions inherited from TypedWritable | |
| static bool | decode_raw_from_bam_stream (TypedWritable *&ptr, ReferenceCount *&ref_ptr, vector_uchar data, BamReader *reader=nullptr) |
| Reads the bytes created by a previous call to encode_to_bam_stream(), and extracts the single object on those bytes. | |
| static TypeHandle | get_class_type () |
| static void | init_type () |
Static Public Member Functions inherited from TypedObject | |
| static TypeHandle | get_class_type () |
| static void | init_type () |
| This function is declared non-inline to work around a compiler bug in g++ 2.96. | |
Static Public Member Functions inherited from ReferenceCount | |
| static TypeHandle | get_class_type () |
| static void | init_type () |
Additional Inherited Members | |
Public Attributes inherited from TypedWritableReferenceCount | |
| static BamReader * | reader = nullptr) |
Public Attributes inherited from TypedObject | |
| get_type | |
Public Attributes inherited from ReferenceCount | |
| get_ref_count | |
| Returns the current reference count. | |
Static Public Attributes inherited from TypedWritable | |
| static TypedWritable *const | Null = nullptr |
This represents a unique collection of RenderEffect objects that correspond to a particular renderable state.
You should not attempt to create or modify a RenderEffects object directly. Instead, call one of the make() functions to create one for you. And instead of modifying a RenderEffects object, create a new one.
Definition at line 41 of file renderEffects.h.
|
virtual |
The destructor is responsible for removing the RenderEffects from the global set if it is there.
Definition at line 55 of file renderEffects.cxx.
| ConstPointerTo< RenderEffects > RenderEffects::add_effect | ( | const RenderEffect * | effect | ) | const |
Returns a new RenderEffects object that represents the same as the source state, with the new RenderEffect added.
If there is already a RenderEffect with the same type, it is replaced.
Definition at line 251 of file renderEffects.cxx.
| void RenderEffects::adjust_transform | ( | ConstPointerTo< TransformState > & | net_transform, |
| ConstPointerTo< TransformState > & | node_transform, | ||
| const PandaNode * | node ) const |
Calls adjust_transform() on all effects.
You may check has_adjust_transform() first to see if any effects define this method to do anything useful.
The order in which the individual effects are applied is not defined, so if more than one effect applies a change to the transform on any particular node, you might get indeterminate results.
Definition at line 476 of file renderEffects.cxx.
|
static |
Called immediately after complete_pointers(), this gives the object a chance to adjust its own pointer if desired.
Most objects don't change pointers after completion, but some need to.
Once this function has been called, the old pointer will no longer be accessed.
Definition at line 743 of file renderEffects.cxx.
References BamReader::register_finalize().
|
virtual |
Receives an array of pointers, one for each time manager->read_pointer() was called in fillin().
Returns the number of pointers processed.
Reimplemented from TypedWritable.
Definition at line 687 of file renderEffects.cxx.
References TypedWritable::complete_pointers().
| void RenderEffects::cull_callback | ( | CullTraverser * | trav, |
| CullTraverserData & | data, | ||
| ConstPointerTo< TransformState > & | node_transform, | ||
| ConstPointerTo< RenderState > & | node_state ) const |
Calls cull_callback() on all effects.
You may check has_cull_callback() first to see if any effects define this method to do anything useful.
Definition at line 457 of file renderEffects.cxx.
Referenced by CullTraverserData::apply_transform_and_state().
|
virtual |
Called by the BamReader to perform any final actions needed for setting up the object after all objects have been read and all pointers have been completed.
Reimplemented from TypedWritable.
Definition at line 768 of file renderEffects.cxx.
References ReferenceCount::get_ref_count, and unref().
| int RenderEffects::find_effect | ( | TypeHandle | type | ) | const |
Searches for an effect with the indicated type in the state, and returns its index if it is found, or -1 if it is not.
Definition at line 163 of file renderEffects.cxx.
|
inlinevirtual |
Reimplemented from TypedWritableReferenceCount.
Definition at line 194 of file renderEffects.h.
|
inlinestatic |
Definition at line 183 of file renderEffects.h.
|
inline |
Returns the nth effect in the state.
Definition at line 110 of file renderEffects.I.
Referenced by CullTraverserData::apply_transform_and_state(), and operator[]().
| const RenderEffect * RenderEffects::get_effect | ( | TypeHandle | type | ) | const |
Looks for a RenderEffect of the indicated type in the state, and returns it if it is found, or NULL if it is not.
Definition at line 311 of file renderEffects.cxx.
|
inline |
Returns the number of separate effects indicated in the state.
Definition at line 102 of file renderEffects.I.
|
static |
Returns the total number of unique RenderEffects objects allocated in the world.
This will go up and down during normal operations.
Definition at line 388 of file renderEffects.cxx.
|
inlinevirtual |
Reimplemented from TypedWritableReferenceCount.
Definition at line 191 of file renderEffects.h.
|
inline |
This function is provided as an optimization, to speed up the render-time checking for the existance of an effect with a compute_adjust_transform on this state.
Definition at line 208 of file renderEffects.I.
|
inline |
This function is provided as an optimization, to speed up the render-time checking for the existance of an effect with a cull_callback on this state.
Definition at line 193 of file renderEffects.I.
Referenced by CullTraverserData::apply_transform_and_state().
|
inline |
This function is provided as an optimization, to speed up the render-time checking for the existance of a DecalEffect on this state.
It returns true if a DecalEffect exists, false otherwise. Note that since there is no additional information stored on the DecalEffect, there's no point in returning it if it exists.
Definition at line 148 of file renderEffects.I.
Referenced by CullTraverser::traverse_below().
|
inline |
This function is provided as an optimization, to speed up the render-time checking for the existance of a ShowBoundsEffect on this state.
It returns true if a ShowBoundsEffect exists, false otherwise. Note that since there is no additional information stored on the ShowBoundsEffect, there's no point in returning it if it exists.
Definition at line 165 of file renderEffects.I.
|
inline |
If has_show_bounds() returns true, this will return true if the ShowBoundsEffect in question requests showing a "tight" bound.
Definition at line 179 of file renderEffects.I.
|
static |
Make sure the global _states map is allocated.
This only has to be done once. We could make this map static, but then we run into problems if anyone creates a RenderEffects object at static init time; it also seems to cause problems when the Panda shared library is unloaded at application exit time.
Definition at line 493 of file renderEffects.cxx.
References Thread::get_current_thread, and Thread::get_main_thread.
Referenced by init_libpgraph().
|
inlinestatic |
Definition at line 186 of file renderEffects.h.
|
inline |
Returns true if the state is empty, false otherwise.
Definition at line 93 of file renderEffects.I.
Referenced by xform().
|
static |
Lists all of the RenderEffects in the cache to the output stream, one per line.
This can be quite a lot of output if the cache is large, so be prepared.
Definition at line 402 of file renderEffects.cxx.
|
static |
Returns a RenderEffects with one effect set.
Definition at line 190 of file renderEffects.cxx.
References ordered_vector< Key, Compare, Vector >::reserve().
|
static |
Returns a RenderEffects with two effects set.
Definition at line 201 of file renderEffects.cxx.
References ordered_vector< Key, Compare, Vector >::push_back(), ordered_vector< Key, Compare, Vector >::reserve(), and ov_set< Key, Compare, Vector >::sort().
|
static |
Returns a RenderEffects with three effects set.
Definition at line 215 of file renderEffects.cxx.
References ordered_vector< Key, Compare, Vector >::push_back(), ordered_vector< Key, Compare, Vector >::reserve(), and ov_set< Key, Compare, Vector >::sort().
|
static |
Returns a RenderEffects with four effects set.
Definition at line 231 of file renderEffects.cxx.
References ordered_vector< Key, Compare, Vector >::push_back(), ordered_vector< Key, Compare, Vector >::reserve(), and ov_set< Key, Compare, Vector >::sort().
|
static |
Returns a RenderEffects with no effects set.
Definition at line 175 of file renderEffects.cxx.
Referenced by NodePath::get_effects().
| bool RenderEffects::operator< | ( | const RenderEffects & | other | ) | const |
Provides an arbitrary ordering among all unique RenderEffects, so we can store the essentially different ones in a big set and throw away the rest.
This method is not needed outside of the RenderEffects class because all equivalent RenderEffects objects are guaranteed to share the same pointer; thus, a pointer comparison is always sufficient.
Definition at line 149 of file renderEffects.cxx.
References ordered_vector< Key, Compare, Vector >::begin(), and ordered_vector< Key, Compare, Vector >::end().
|
inline |
Returns the nth effect in the state.
Definition at line 127 of file renderEffects.I.
|
inline |
Returns the effect in the state with the given type.
Definition at line 136 of file renderEffects.I.
References get_effect().
| void RenderEffects::output | ( | std::ostream & | out | ) | const |
Definition at line 353 of file renderEffects.cxx.
|
virtual |
Preprocesses the accumulated transform that is about to be applied to (or through) this node due to a flatten operation.
The returned value will be used instead.
Definition at line 86 of file renderEffects.cxx.
|
static |
Tells the BamReader how to create objects of type RenderEffects.
Definition at line 658 of file renderEffects.cxx.
References BamReader::get_factory(), and Factory< Type >::register_factory().
Referenced by init_libpgraph().
| ConstPointerTo< RenderEffects > RenderEffects::remove_effect | ( | TypeHandle | type | ) | const |
Returns a new RenderEffects object that represents the same as the source state, with the indicated RenderEffect removed.
Definition at line 288 of file renderEffects.cxx.
|
virtual |
Some objects require all of their nested pointers to have been completed before the objects themselves can be completed.
If this is the case, override this method to return true, and be careful with circular references (which would make the object unreadable from a bam file).
Reimplemented from TypedWritable.
Definition at line 724 of file renderEffects.cxx.
| bool RenderEffects::safe_to_combine | ( | ) | const |
Returns true if all of the effects in this set can safely be shared with a sibling node that has the exact same set of effects, or false if this would be bad for any of the effects.
Definition at line 103 of file renderEffects.cxx.
| bool RenderEffects::safe_to_transform | ( | ) | const |
Returns true if all of the effects in this set can safely be transformed, and therefore the complete set can be transformed, by calling xform().
Definition at line 68 of file renderEffects.cxx.
|
inline |
Returns the number of separate effects indicated in the state.
Definition at line 119 of file renderEffects.I.
|
virtual |
This method overrides ReferenceCount::unref() to check whether the remaining reference count is entirely in the cache, and if so, it checks for and breaks a cycle in the cache involving this object.
This is designed to prevent leaks from cyclical references within the cache.
Note that this is not a virtual method, and cannot be because ReferenceCount itself declares no virtual methods (it avoids the overhead of a virtual function pointer). But this doesn't matter, because PT(TransformState) is a template class, and will call the appropriate method even though it is non-virtual.
Reimplemented from ReferenceCount.
Definition at line 333 of file renderEffects.cxx.
References ReferenceCount::unref().
Referenced by finalize().
|
static |
Ensures that the cache is still stored in sorted order.
Returns true if so, false if there is a problem (which implies someone has modified one of the supposedly-const RenderEffects objects).
Definition at line 417 of file renderEffects.cxx.
| void RenderEffects::write | ( | std::ostream & | out, |
| int | indent_level ) const |
Definition at line 374 of file renderEffects.cxx.
Writes the contents of this object to the datagram for shipping out to a Bam file.
Reimplemented from TypedWritable.
Definition at line 667 of file renderEffects.cxx.
References Datagram::add_uint16(), TypedWritable::write_datagram(), and BamWriter::write_pointer().
| ConstPointerTo< RenderEffects > RenderEffects::xform | ( | const LMatrix4 & | mat | ) | const |
Returns a new RenderEffects transformed by the indicated matrix.
Definition at line 119 of file renderEffects.cxx.
References is_empty().