Render thread
Core objects and interaction with the render thread.
Classes
-
CoreSyncData— Helper class for syncing dirty data from CoreObject to RenderProxy. -
RenderThread— Manager for the render thread. -
render::RenderProxy— Represents a partial copy of a CoreObject, meant to be used specifically on the render thread. -
CoreObject— Provides a standardized way to initialize/destroy objects, a unique runtime ID for each object, and a way to specify dependant CoreObjects.
Structs
-
RenderProxySyncPacket— Packet containing data for synchronizing a CoreObject with its RenderProxy. -
implementation::RenderProxySyncPacketType— Defines an intermediate type used for storing data of type T in a RenderProxySyncPacket. -
implementation::RenderProxySyncPacketTypeInitializeWithAllocator— Initializes an intermediate type used for storing data of type T in a RenderProxySyncPacket with an allocator if needed.
Enums
-
render::RenderProxyFlag— Represents the current state of a RenderProxy. -
CoreObjectFlag— Represents the current state of a CoreObject.
Free functions
GetRenderThread
RenderThread &GetRenderThread()
Returns the render thread manager used for dealing with the render thread from external threads.
AssertIfNotRenderThread
void AssertIfNotRenderThread()
Throws an exception if current thread isn't the render thread.
AssertIfRenderThread
void AssertIfRenderThread()
Throws an exception if current thread is the render thread.
EnsureRenderThread
inline bool EnsureRenderThread()
Returns false if currently not at the render thread, and triggers an ensure.
GetRenderProxy
T &&GetRenderProxy(T &&value, std::enable_if_t<!B3DIsSharedPointer<std::decay_t<T>>::value && !B3DIsWeakSharedPointer<std::decay_t<T>>::value> * = 0)
Pass non-shared-pointers as is, they aren't core objects.
GetRenderProxy
T &&GetRenderProxy(T &&value, std::enable_if_t<(B3DIsSharedPointer<std::decay_t<T>>::value || B3DIsWeakSharedPointer<std::decay_t<T>>::value) && !std::is_class<std::decay_t<typename std::decay_t<T>::element_type>>::value> * = 0)
Pass shared-pointers to non-classes as is, they aren't core objects.
GetRenderProxy
T &&GetRenderProxy(T &&value, std::enable_if_t<(B3DIsSharedPointer<std::decay_t<T>>::value || B3DIsWeakSharedPointer<std::decay_t<T>>::value) && (std::is_class<std::decay_t<typename std::decay_t<T>::element_type>>::value && !std::is_base_of<CoreObject, std::decay_t<typename std::decay_t<T>::element_type>>::value)> * = 0)
Pass shared-pointers to classes that don't derive from CoreObject as is, they aren't core objects.
GetRenderProxy
decltype(B3DGetRenderProxy(std::declval<T>())) GetRenderProxy(T &&value, std::enable_if_t<B3DIsSharedPointer<std::decay_t<T>>::value && (std::is_class<std::decay_t<typename std::decay_t<T>::element_type>>::value && std::is_base_of<CoreObject, std::decay_t<typename std::decay_t<T>::element_type>>::value)> * = 0)
Convert shared-pointers with classes that derive from CoreObject to their RenderProxy variants.
GetRenderProxy
decltype(B3DGetRenderProxy(std::declval<T>())) GetRenderProxy(T &&value, std::enable_if_t<(B3DIsWeakSharedPointer<std::decay_t<T>>::value) && (std::is_class<std::decay_t<typename std::decay_t<T>::element_type>>::value && std::is_base_of<CoreObject, std::decay_t<typename std::decay_t<T>::element_type>>::value)> * = 0)
Convert shared-pointers with classes that derive from CoreObject to their RenderProxy variants.
RenderProxySyncField
void RenderProxySyncField(FieldTypeA &a, FieldTypeB &b, std::enable_if_t<!IsRenderProxy> * = 0)
Copies a field from the non-core object into the field in the RenderProxySyncPacket.
RenderProxySyncField
void RenderProxySyncField(FieldTypeA &a, FieldTypeB &b, std::enable_if_t<IsRenderProxy> * = 0)
Copies a field from the RenderProxySyncPacket to a core object.
RenderProxySyncField
void RenderProxySyncField(RenderProxySyncVector<FieldTypeA> &a, Vector<FieldTypeB> &b, std::enable_if_t<!IsRenderProxy> * = 0)
Copies an array from the non-core object into the field in the RenderProxySyncPacket.
RenderProxySyncField
void RenderProxySyncField(RenderProxySyncVector<FieldTypeA> &a, Vector<FieldTypeB> &b, std::enable_if_t<IsRenderProxy> * = 0)
Copies an array from the RenderProxySyncPacket to a core object.
RenderProxySyncField
void RenderProxySyncField(RenderProxySyncVector<FieldTypeA> &a, TInlineArray<FieldTypeB, N> &b, std::enable_if_t<!IsRenderProxy> * = 0)
Copies an array from the non-core object into the field in the RenderProxySyncPacket.
RenderProxySyncField
void RenderProxySyncField(RenderProxySyncVector<FieldTypeA> &a, TInlineArray<FieldTypeB, N> &b, std::enable_if_t<IsRenderProxy> * = 0)
Copies an array from the RenderProxySyncPacket to a core object.
Internal
Symbols intended for engine-internal use. Not part of the public API.
Classes
-
CoreObjectManager— Manager that keeps track of all active CoreObjects.
Structs
-
CoreObjectManager::PerObjectSyncData— Stores dirty data that is to be transferred from main thread to render thread part of a CoreObject, for a single object. -
CoreObjectManager::PerFrameSyncData— Stores dirty data that is to be transferred from main thread to thread thread part of a CoreObject, for all dirty objects in one frame. -
CoreObjectManager::DirtyObjectData— Contains information about a dirty CoreObject that requires syncing to the render thread.