25#define CE_DECL_RENDERER_OBJECT(T) \
26 template<> struct RendererObjectTrait<T> { \
28 using Manager = T##Manager; \
127 object.changeID(
newID);
149 template<
typename... Args>
163 static_cast<SelfType&
>(*
this), std::forward<Args>(args)...));
168 object->mID = objectID;
180 mObjects[objectID]->changeID(objectID);
#define CE_ASSERT(...)
Definition Macros.hpp:323
The CeresEngine renderer.
Definition Renderer.hpp:35
A base class for all renderer objects.
Definition RendererObject.hpp:38
Event< void(RendererObjectID oldID)> didChangeID
An event called whenever the object changes it's ID.
Definition RendererObject.hpp:55
RendererObjectID getID() const noexcept
An identifier that uniquely identifies this object in the renderer.
Definition RendererObject.hpp:70
RendererObject()=default
Creates a new RendererObject instance.
virtual ~RendererObject() noexcept=default
Destroys an existing RendererObject instance.
RendererObjectID mID
An identifier that uniquely identifies this object in the renderer.
Definition RendererObject.hpp:48
virtual void destroy()=0
Destroys the RendererObject.
void changeID(RendererObjectID newID) noexcept
Method called whenever the RendererObject ID changes.
Event< void(RendererObjectID newID)> willChangeID
An event called whenever the object is about to change it's ID.
Definition RendererObject.hpp:52
A base class for all renderer object managers.
Definition RendererObject.hpp:106
virtual ~RendererObjectManager() noexcept=default
Destroys an existing instance of RendererObjectManager.
Renderer & mRenderer
The renderer that owns this manager instance.
Definition RendererObject.hpp:109
void notifyChangeID(RendererObject &object, const RendererObjectID newID) noexcept
Method called whenever the RendererObject ID changes.
Definition RendererObject.hpp:126
RendererObjectManager(Renderer &renderer) noexcept
Creates a new RendererObjectManager instance.
Renderer & getRenderer() const noexcept
The renderer that owns this manager instance.
Definition RendererObject.hpp:121
Base template for the event class.
Definition Event.hpp:27
Template class to help implement sub-classes of RendererObject.
Definition RendererObject.hpp:82
RendererObjectManagerType< SelfType > ManagerType
Definition RendererObject.hpp:83
friend ManagerType
Definition RendererObject.hpp:84
void destroy() noexcept override
Destroys the RendererObject.
Definition RendererObject.hpp:98
ManagerType & mManager
The owning object manager.
Definition RendererObject.hpp:88
TRendererObject(ManagerType &manager, Args &&... args)
Creates a new TRendererObject instance.
Definition RendererObject.hpp:95
ManagerType & getManager() const noexcept
The owning object manager.
Definition RendererObject.hpp:102
Template class to help implement sub-classes of RendererObjectManager.
Definition RendererObject.hpp:136
ObjectType & create(Args &&... args)
Creates a new renderer object by calling it's constructor.
Definition RendererObject.hpp:159
friend RendererObject
Definition RendererObject.hpp:138
friend ObjectType
Definition RendererObject.hpp:137
TRendererObjectManager(Vector< UPtr< ObjectType > > &objects, Args &&... args)
Creates a new TRendererObjectManager instance.
Definition RendererObject.hpp:150
void destroy(ObjectType &object)
Destroys an existing renderer object by calling it's destructor and releasing it's memory.
Definition RendererObject.hpp:177
Vector< UPtr< ObjectType > > & mObjects
A vector that owns all managed objects.
Definition RendererObject.hpp:142
Definition Application.hpp:19
std::unique_ptr< T, Deleter > UPtr
UPtr is a smart pointer that owns and manages another object through a pointer and disposes of that o...
Definition SmartPtr.hpp:28
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
typename RendererObjectTrait< T >::Manager RendererObjectManagerType
The manager type for the T object.
Definition RendererObject.hpp:32
std::uint32_t UInt32
Definition DataTypes.hpp:23
UInt32 RendererObjectID
A type-alias for a type that uniquely identifies a RendererObject.
Definition RendererObject.hpp:35
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
A type trait object that associates a RendererObject and it's RendererObjectManager type.
Definition RendererObject.hpp:23