From 3f95bc6b463f629c620ba5811ca3ce53ed9c03a2 Mon Sep 17 00:00:00 2001 From: fschildt Date: Tue, 25 Nov 2025 06:21:26 +0100 Subject: add MemoryManager, enhance cmake,compile.sh --- src/renderer/RSoftwareBackend.cpp | 16 +++++++++------- src/renderer/RSoftwareBackend.hpp | 2 +- src/renderer/Renderer.cpp | 18 +++++++++--------- src/renderer/Renderer.hpp | 14 ++++++++------ 4 files changed, 27 insertions(+), 23 deletions(-) (limited to 'src/renderer') diff --git a/src/renderer/RSoftwareBackend.cpp b/src/renderer/RSoftwareBackend.cpp index f4f31f3..927fc92 100644 --- a/src/renderer/RSoftwareBackend.cpp +++ b/src/renderer/RSoftwareBackend.cpp @@ -1,3 +1,4 @@ +#include "common/MemoryManager.hpp" #include "renderer/Renderer.hpp" #include @@ -39,8 +40,8 @@ RSoftwareBackend::Draw() SortRenderEntities(); - for (RZBuffEntry& entry : m_renderer.m_z_buff) { - REntity& entity = m_renderer.m_render_entities[entry.entity_index]; + for (auto& sort_entry : m_renderer.m_sort_entries) { + REntity& entity = m_renderer.m_render_entities[sort_entry.entity_index]; switch (entity.type) { case REntityType_Rectangle: { DrawRectangle(entity.rect); @@ -51,7 +52,7 @@ RSoftwareBackend::Draw() } break; case REntityType_Text: { - DrawText(entity.text); + DrawFrameString32(entity.string32); }; break; case REntityType_Circle: { @@ -93,9 +94,9 @@ RSoftwareBackend::Resize(int32_t w, int32_t h) void RSoftwareBackend::SortRenderEntities() { - auto& z_buff = m_renderer.m_z_buff; + auto& z_buff = m_renderer.m_sort_entries; std::sort(z_buff.begin(), z_buff.end(), - [](const RZBuffEntry& e1, const RZBuffEntry& e2) { + [](const RSortEntry& e1, const RSortEntry& e2) { return e1.z < e2.z; }); } @@ -218,11 +219,12 @@ RSoftwareBackend::DrawAlphaBitmap(REntity_AlphaBitmap& entity) } void -RSoftwareBackend::DrawText(REntity_Text& entity) +RSoftwareBackend::DrawFrameString32(REntity_String32& entity) { int32_t xscreen = m_renderer.WorldXToScreenX(entity.pos.x); int32_t yscreen = m_renderer.WorldYToScreenY(entity.pos.y); - for (char32_t ch : entity.text) { + std::u32string& str = MemoryManager::GetString32(entity.id); + for (char32_t ch : str) { Glyph& glyph = entity.font.GetGlyph(ch); int32_t x = xscreen + glyph.xoff; diff --git a/src/renderer/RSoftwareBackend.hpp b/src/renderer/RSoftwareBackend.hpp index 482bb52..2563558 100644 --- a/src/renderer/RSoftwareBackend.hpp +++ b/src/renderer/RSoftwareBackend.hpp @@ -30,7 +30,7 @@ private: void DrawClear(); void DrawRectangle(REntity_Rectangle& entity); void DrawAlphaBitmap(REntity_AlphaBitmap& entity); - void DrawText(REntity_Text& entity); + void DrawFrameString32(REntity_String32& entity); void DrawTextGlyph(Glyph& glyph, Color color, int32_t xscreen, int32_t yscreen); diff --git a/src/renderer/Renderer.cpp b/src/renderer/Renderer.cpp index 87e2ff7..17694b0 100644 --- a/src/renderer/Renderer.cpp +++ b/src/renderer/Renderer.cpp @@ -15,7 +15,7 @@ Renderer::Init(SDL_Window* window) { m_window = window; m_render_entities.reserve(1024); - m_z_buff.reserve(1024); + m_sort_entries.reserve(1024); m_backend = std::make_unique(*this); } @@ -23,7 +23,7 @@ void Renderer::Reset() { m_render_entities.clear(); - m_z_buff.clear(); + m_sort_entries.clear(); SetCameraSize(0.0f, 0.0f); } @@ -76,7 +76,7 @@ Renderer::PushAlphaBitmap(AlphaBitmap& bitmap, V2F32 pos, Color color, uint32_t pos, color }}); - m_z_buff.emplace_back(z, m_render_entities.size()-1); + m_sort_entries.emplace_back(z, m_render_entities.size()-1); } void @@ -87,7 +87,7 @@ Renderer::PushRectangle(Rectangle rect, Color color, uint32_t z) rect, color }}); - m_z_buff.emplace_back(z, m_render_entities.size()-1); + m_sort_entries.emplace_back(z, m_render_entities.size()-1); } void @@ -98,20 +98,20 @@ Renderer::PushCircle(Circle circle, Color color, uint32_t z) circle, color }}); - m_z_buff.emplace_back(z, m_render_entities.size()-1); + m_sort_entries.emplace_back(z, m_render_entities.size()-1); } void -Renderer::PushText(std::u32string& text, Font& font, V2F32 pos, Color color, uint32_t z) +Renderer::PushString32(String32Id id, Font& font, V2F32 pos, Color color, uint32_t z) { - m_render_entities.emplace_back(REntity{.text{ + m_render_entities.emplace_back(REntity{.string32{ REntityType_Text, - text, + id, font, pos, color }}); - m_z_buff.emplace_back(z, m_render_entities.size()-1); + m_sort_entries.emplace_back(z, m_render_entities.size()-1); } diff --git a/src/renderer/Renderer.hpp b/src/renderer/Renderer.hpp index da57e29..8981826 100644 --- a/src/renderer/Renderer.hpp +++ b/src/renderer/Renderer.hpp @@ -1,8 +1,10 @@ #pragma once +#include #include #include #include +#include #include #include @@ -45,9 +47,9 @@ struct REntity_Circle { Color color; }; -struct REntity_Text { +struct REntity_String32 { REntityType type; - std::u32string& text; + String32Id id; Font& font; V2F32 pos; Color color; @@ -59,10 +61,10 @@ union REntity { REntity_AlphaBitmap bitmap; REntity_Rectangle rect; REntity_Circle circle; - REntity_Text text; + REntity_String32 string32; }; -struct RZBuffEntry { +struct RSortEntry { uint32_t z; uint32_t entity_index; }; @@ -85,7 +87,7 @@ public: void PushAlphaBitmap(AlphaBitmap& bitmap, V2F32 pos, Color color, uint32_t z); void PushRectangle(Rectangle rect, Color color, uint32_t z); void PushCircle(Circle circle, Color color, uint32_t z); - void PushText(std::u32string& text, Font& font, V2F32 pos, Color color, uint32_t z); + void PushString32(String32Id id, Font& font, V2F32 pos, Color color, uint32_t z); /* helper functions */ @@ -108,7 +110,7 @@ public: Color m_clear_color {}; std::vector m_render_entities; - std::vector m_z_buff; + std::vector m_sort_entries; std::unique_ptr m_backend; friend class RSoftwareBackend; -- cgit v1.2.3