#pragma once #include "SDL3/SDL.h" #include #include #include #include "CModelBase.h" #include "CTransform.h" #include "CCamera.h" #include "CDrawable.h" #define LINK_RENDERER_TO_CLASS(_class, name) std::string _class::GetType() const { return #name; }; CFactoryInitter<_class, CRendererBase> __renderer_initter_ ## name = CFactoryInitter<_class, CRendererBase>(#name, std::function*)>([](CFactoryInitter<_class, CRendererBase>* tter) -> void { tter->m_factory = &CEngine::GetInstance()->RenderersFactory; })); #define DEFINE_RENDERER() std::string GetType() const override class CRendererBase { public: virtual ~CRendererBase() = default; virtual void Init(SDL_Window* window) = 0; virtual size_t GetGenericFlag() const = 0; virtual void ClearWindow() = 0; virtual void Display() = 0; virtual void SetupCamera(std::shared_ptr camera); virtual void DrawModel(std::shared_ptr model, const CTransform& transform); void Update(); virtual void V_Update(); virtual std::shared_ptr CreateAnimatedDrawable() const; virtual std::shared_ptr CreateNonAnimatedDrawable() const; virtual std::string GetModelType() const; //TODO maybe better solution? virtual std::string GetMaterialType() const; //TODO maybe better solution? virtual std::string GetType() const; };