BatchFillRoundedRect
All checks were successful
Run ReCI Build Test / Explore-Gitea-Actions (push) Successful in 3m44s
All checks were successful
Run ReCI Build Test / Explore-Gitea-Actions (push) Successful in 3m44s
This commit is contained in:
@@ -205,6 +205,8 @@ namespace JGL::J2D {
|
||||
/// @param subdivisions The amount of sub-divisions (and calculations) to be performed per-arc rounding corner.
|
||||
void FillRoundedRect(const Color4& color, const Vector2& pos, const Vector2& size, float radius = 5, unsigned int subdivisions = 8);
|
||||
|
||||
void BatchFillRoundedRect(const Color4* colors, const Vector2* positions, const Vector2* sizes, float radius, unsigned int subdivisions, const size_t& count);
|
||||
|
||||
/// Draws a filled rectangle with chamfered (beveled) corners on the screen.
|
||||
/// @param color A 3-or-4 channel color value. @see class Color3, class Color4
|
||||
/// @param pos The top-left corner of the rectangle.
|
||||
|
@@ -396,23 +396,25 @@ void J2D::FillGradientRect(const Color4& top_left_color, const Color4& bottom_le
|
||||
glColor4fv(default_state.draw_color);
|
||||
}
|
||||
|
||||
void J2D::FillRoundedRect(const Color4& color, const Vector2& pos, const Vector2& size, float radius, unsigned int subdivisions) {
|
||||
void J2D::BatchFillRoundedRect(const Color4* colors, const Vector2* positions, const Vector2* sizes, float radius, unsigned int subdivisions, const size_t& count) {
|
||||
std::vector<Instance2D> rect_instances(count * 2);
|
||||
std::vector<Instance2D> circle_instances(count * 4);
|
||||
|
||||
if (current_state.current_shader)
|
||||
current_state.current_shader->SetInt("JGL_RENDERING_ROUTINE", RENDERING_ROUTINE_ID::J2D_FillRoundedRect);
|
||||
|
||||
std::array<Instance2D, 4> circle_instances
|
||||
{
|
||||
Instance2D(color, Vector2(pos.x + radius, pos.y + radius), Vector2::One, Vector2(radius, radius)),
|
||||
Instance2D(color, Vector2(pos.x + size.x - radius, pos.y + radius), Vector2::One, Vector2(radius, radius)),
|
||||
Instance2D(color, Vector2(pos.x + radius, pos.y + size.y - radius), Vector2::One, Vector2(radius, radius)),
|
||||
Instance2D(color, Vector2(pos.x + size.x - radius, pos.y + size.y - radius), Vector2::One, Vector2(radius, radius))
|
||||
};
|
||||
for (unsigned int i = 0; i < count; i++) {
|
||||
unsigned int rect_i = i * 2;
|
||||
unsigned int circle_i = i * 4;
|
||||
|
||||
std::array<Instance2D, 2> rect_instances
|
||||
{
|
||||
Instance2D(color,Vector2(pos.x + radius, pos.y), Vector2(size.x - 2 * radius, size.y)),
|
||||
Instance2D(color, Vector2(pos.x, pos.y + radius), Vector2(size.x, size.y - 2 * radius))
|
||||
};
|
||||
rect_instances[rect_i] = Instance2D(colors[i], Vector2(positions[i].x + radius, positions[i].y), Vector2(sizes[i].x - 2 * radius, sizes[i].y));
|
||||
rect_instances[rect_i + 1] = Instance2D(colors[i], Vector2(positions[i].x, positions[i].y + radius), Vector2(sizes[i].x, sizes[i].y - 2 * radius));
|
||||
|
||||
circle_instances[circle_i] = Instance2D(colors[i], Vector2(positions[i].x + radius, positions[i].y + radius), Vector2::One, Vector2(radius, radius));
|
||||
circle_instances[circle_i + 1] = Instance2D(colors[i], Vector2(positions[i].x + sizes[i].x - radius, positions[i].y + radius), Vector2::One, Vector2(radius, radius));
|
||||
circle_instances[circle_i + 2] = Instance2D(colors[i], Vector2(positions[i].x + radius, positions[i].y + sizes[i].y - radius), Vector2::One, Vector2(radius, radius));
|
||||
circle_instances[circle_i + 3] = Instance2D(colors[i], Vector2(positions[i].x + sizes[i].x - radius, positions[i].y + sizes[i].y - radius), Vector2::One, Vector2(radius, radius));
|
||||
}
|
||||
|
||||
J2D::BatchFillRect(rect_instances.data(), rect_instances.size());
|
||||
J2D::BatchFillCircle(circle_instances.data(), subdivisions, circle_instances.size());
|
||||
@@ -421,6 +423,10 @@ void J2D::FillRoundedRect(const Color4& color, const Vector2& pos, const Vector2
|
||||
current_state.current_shader->SetInt("JGL_RENDERING_ROUTINE", 0);
|
||||
}
|
||||
|
||||
void J2D::FillRoundedRect(const Color4& color, const Vector2& pos, const Vector2& size, float radius, unsigned int subdivisions) {
|
||||
J2D::BatchFillRoundedRect(&color, &pos, &size, radius, subdivisions, 1);
|
||||
}
|
||||
|
||||
void J2D::DrawSprite(const Texture* texture, float positionX, float positionY, float rad_rotation,
|
||||
float originX, float originY,float scaleX, float scaleY,
|
||||
const Color4& color, Direction inversion) {
|
||||
|
Reference in New Issue
Block a user