aboutsummaryrefslogtreecommitdiff
path: root/src/renderer
diff options
context:
space:
mode:
authorfschildt <florian.schildt@protonmail.com>2025-11-24 19:55:42 +0100
committerfschildt <florian.schildt@protonmail.com>2025-11-24 19:55:42 +0100
commite4584401ad865afb5a0fec8b7cab67794490a10d (patch)
tree6e13bfdac6b2687be6f3c180132e2a57ee71891d /src/renderer
parentfeb4bc8cbc66ba928319ddb2cc1bf48010487863 (diff)
rendering: refactor z-based sorting/drawing
Diffstat (limited to 'src/renderer')
-rw-r--r--src/renderer/RSoftwareBackend.cpp11
-rw-r--r--src/renderer/Renderer.cpp20
-rw-r--r--src/renderer/Renderer.hpp23
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;
};