diff options
Diffstat (limited to 'src/renderer')
| -rw-r--r-- | src/renderer/RSoftwareBackend.cpp | 11 | ||||
| -rw-r--r-- | src/renderer/Renderer.cpp | 20 | ||||
| -rw-r--r-- | src/renderer/Renderer.hpp | 23 |
3 files changed, 26 insertions, 28 deletions
diff --git a/src/renderer/RSoftwareBackend.cpp b/src/renderer/RSoftwareBackend.cpp index 587ac74..f4f31f3 100644 --- a/src/renderer/RSoftwareBackend.cpp +++ b/src/renderer/RSoftwareBackend.cpp @@ -1,3 +1,4 @@ +#include "renderer/Renderer.hpp" #include <renderer/RSoftwareBackend.hpp> #include <SDL3/SDL_video.h> @@ -38,8 +39,8 @@ RSoftwareBackend::Draw() SortRenderEntities(); - for (RSortEntry sort_entry : m_renderer.m_sort_entries) { - REntity& entity = m_renderer.m_render_entities[sort_entry.entity_index]; + for (RZBuffEntry& entry : m_renderer.m_z_buff) { + REntity& entity = m_renderer.m_render_entities[entry.entity_index]; switch (entity.type) { case REntityType_Rectangle: { DrawRectangle(entity.rect); @@ -92,9 +93,9 @@ RSoftwareBackend::Resize(int32_t w, int32_t h) void RSoftwareBackend::SortRenderEntities() { - auto& sort_entries = m_renderer.m_sort_entries; - std::sort(sort_entries.begin(), sort_entries.end(), - [](const RSortEntry& e1, const RSortEntry& e2) { + auto& z_buff = m_renderer.m_z_buff; + std::sort(z_buff.begin(), z_buff.end(), + [](const RZBuffEntry& e1, const RZBuffEntry& e2) { return e1.z < e2.z; }); } diff --git a/src/renderer/Renderer.cpp b/src/renderer/Renderer.cpp index 4b6cb2a..87e2ff7 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_sort_entries.reserve(1024); + m_z_buff.reserve(1024); m_backend = std::make_unique<RSoftwareBackend>(*this); } @@ -23,7 +23,7 @@ void Renderer::Reset() { m_render_entities.clear(); - m_sort_entries.clear(); + m_z_buff.clear(); SetCameraSize(0.0f, 0.0f); } @@ -68,7 +68,7 @@ Renderer::SetClearColor(Color color) } void -Renderer::PushAlphaBitmap(AlphaBitmap& bitmap, V3F32 pos, Color color) +Renderer::PushAlphaBitmap(AlphaBitmap& bitmap, V2F32 pos, Color color, uint32_t z) { m_render_entities.emplace_back(REntity{.bitmap{ REntityType_AlphaBitmap, @@ -76,33 +76,33 @@ Renderer::PushAlphaBitmap(AlphaBitmap& bitmap, V3F32 pos, Color color) pos, color }}); - m_sort_entries.emplace_back(pos.z, m_render_entities.size()-1); + m_z_buff.emplace_back(z, m_render_entities.size()-1); } void -Renderer::PushRectangle(Rectangle rect, Color color, float z) +Renderer::PushRectangle(Rectangle rect, Color color, uint32_t z) { m_render_entities.emplace_back(REntity{.rect{ REntityType_Rectangle, rect, color }}); - m_sort_entries.emplace_back(z, m_render_entities.size()-1); + m_z_buff.emplace_back(z, m_render_entities.size()-1); } void -Renderer::PushCircle(Circle circle, Color color, float z) +Renderer::PushCircle(Circle circle, Color color, uint32_t z) { m_render_entities.emplace_back(REntity{.circle{ REntityType_Circle, circle, color }}); - m_sort_entries.emplace_back(z, m_render_entities.size()-1); + m_z_buff.emplace_back(z, m_render_entities.size()-1); } void -Renderer::PushText(std::u32string& text, Font& font, V3F32 pos, Color color) +Renderer::PushText(std::u32string& text, Font& font, V2F32 pos, Color color, uint32_t z) { m_render_entities.emplace_back(REntity{.text{ REntityType_Text, @@ -111,7 +111,7 @@ Renderer::PushText(std::u32string& text, Font& font, V3F32 pos, Color color) pos, color }}); - m_sort_entries.emplace_back(pos.z, m_render_entities.size()-1); + m_z_buff.emplace_back(z, m_render_entities.size()-1); } diff --git a/src/renderer/Renderer.hpp b/src/renderer/Renderer.hpp index 47837ee..da57e29 100644 --- a/src/renderer/Renderer.hpp +++ b/src/renderer/Renderer.hpp @@ -29,7 +29,7 @@ enum REntityType : int32_t { struct REntity_AlphaBitmap { REntityType type; AlphaBitmap& bitmap; - V3F32 pos; + V2F32 pos; Color color; }; @@ -49,7 +49,7 @@ struct REntity_Text { REntityType type; std::u32string& text; Font& font; - V3F32 pos; + V2F32 pos; Color color; }; @@ -62,9 +62,9 @@ union REntity { REntity_Text text; }; -struct RSortEntry { - float z; - size_t entity_index; +struct RZBuffEntry { + uint32_t z; + uint32_t entity_index; }; @@ -82,15 +82,14 @@ public: void SetScreenSize(int32_t w, int32_t h); void SetCameraSize(float w, float h); - void PushAlphaBitmap(AlphaBitmap& bitmap, V3F32 pos, Color color); - void PushRectangle(Rectangle rect, Color color, float z); - void PushCircle(Circle circle, Color color, float z); - void PushText(std::u32string& text, Font& font, V3F32 pos, Color color); + 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); /* helper functions */ - int32_t WorldXToScreenX(float x); int32_t WorldYToScreenY(float y); int32_t WorldWidthToScreenWidth(float w); @@ -109,11 +108,9 @@ public: Color m_clear_color {}; std::vector<REntity> m_render_entities; - std::vector<RSortEntry> m_sort_entries; + std::vector<RZBuffEntry> m_z_buff; std::unique_ptr<RSoftwareBackend> m_backend; - - friend class RSoftwareBackend; }; |
