packing and transparency

main
Brett 2024-01-02 13:03:51 -05:00
parent a071406138
commit 6137773b77
3 changed files with 22 additions and 9 deletions

View File

@ -78,14 +78,14 @@ namespace blt::gfx
inline void drawRectangle(std::string_view texture, const rectangle_t& rectangle)
{
const static blt::vec4 empty {0,0,0,0};
const static blt::vec4 full {1,1,1,1};
const static blt::vec4 empty{0, 0, 0, 0};
const static blt::vec4 full{1, 1, 1, 1};
complex_rectangles[texture][empty][full].push_back(rectangle);
}
inline void drawRectangle(const blt::vec4& color, const rectangle_t& rectangle)
{
const static blt::vec4 empty {0,0,0,0};
const static blt::vec4 empty{0, 0, 0, 0};
complex_rectangles[""][color][empty].push_back(rectangle);
}
@ -94,11 +94,18 @@ namespace blt::gfx
complex_rectangles[draw_info.texture_name][draw_info.color][draw_info.blend].push_back(rectangle);
}
void render();
template<typename T, typename... P>
inline void drawRectangle(const T& render_info, P... p)
{
drawRectangle(render_info, {p...});
}
void render(bool transparency = true);
void cleanup();
[[nodiscard]] inline size_t draw_count(){
[[nodiscard]] inline size_t draw_count()
{
return draw_count_;
}
};

View File

@ -61,8 +61,13 @@ namespace blt::gfx
delete shader;
}
void batch_renderer_2d::render()
void batch_renderer_2d::render(bool transparency)
{
if (transparency)
{
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
draw_count_ = 0;
shader->bind();
square_vao->bind();
@ -93,5 +98,7 @@ namespace blt::gfx
}
}
}
if (transparency)
glDisable(GL_BLEND);
}
}

View File

@ -72,9 +72,8 @@ void update(std::int32_t width, std::int32_t height)
const float w = 120, h = 120, cf = 30, rf = 15, crf = 10;
renderer_2d.drawRectangle("ibuythat", blt::gfx::rectangle_t(width/2.0, height/2.0, width, height, 90));
renderer_2d.drawRectangle("niko", {bx, by, w, h});
renderer_2d.drawRectangle({bx / width, ((bx / width) + (bx / height)) / 2.0f, by / height}, {bx + w, by + h, w, h});
renderer_2d.drawRectangle("ibuythat", (float)width/2.0f, (float)height/2.0f, (float)width, (float)height, 90.0f);
renderer_2d.drawRectangle("niko", bx, by, w, h);
bx += mx * blt::gfx::getFrameDeltaSeconds() * cf;
by += my * blt::gfx::getFrameDeltaSeconds() * cf;