#include #include namespace mlx { GraphicsSupport::GraphicsSupport([[maybe_unused]] std::size_t w, [[maybe_unused]] std::size_t h, NonOwningPtr render_target, int id) : m_put_pixel_manager(&m_renderer), p_window(nullptr), m_id(id), m_has_window(false) { MLX_PROFILE_FUNCTION(); // TODO : re-enable render targets m_renderer.Init(nullptr); m_scene_renderer.Init(m_renderer); p_scene = std::make_unique(); } GraphicsSupport::GraphicsSupport(std::size_t w, std::size_t h, std::string title, int id) : m_put_pixel_manager(&m_renderer), p_window(std::make_shared(w, h, title)), m_id(id), m_has_window(true) { MLX_PROFILE_FUNCTION(); m_renderer.Init(p_window.get()); m_scene_renderer.Init(m_renderer); p_scene = std::make_unique(); } void GraphicsSupport::Render() noexcept { MLX_PROFILE_FUNCTION(); if(m_renderer.BeginFrame()) { m_draw_layer = 0; m_scene_renderer.Render(*p_scene, m_renderer); m_renderer.EndFrame(); } #ifdef GRAPHICS_MEMORY_DUMP // dump memory to file every two seconds using namespace std::chrono_literals; static std::int64_t timer = static_cast(std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count()); if(std::chrono::duration{ static_cast(std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count()) - timer } >= 1s) { RenderCore::Get().GetAllocator().DumpMemoryToJson(); timer = static_cast(std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count()); } #endif } GraphicsSupport::~GraphicsSupport() { MLX_PROFILE_FUNCTION(); RenderCore::Get().WaitDeviceIdle(); p_scene.reset(); m_scene_renderer.Destroy(); m_renderer.Destroy(); if(p_window) p_window->Destroy(); } }