Add renderer function to clear rectangle

This commit is contained in:
2025-10-18 17:43:22 +01:00
parent 450fdd8afe
commit b964c277a7
2 changed files with 26 additions and 6 deletions

View File

@@ -125,11 +125,6 @@ void renderer_handle()
drmHandleEvent(drm_fd, &ev);
}
void renderer_clear()
{
memset(fbs[back].buf, 0, fbs[back].size);
}
void renderer_swap()
{
const int err = drmModePageFlip(
@@ -141,6 +136,29 @@ void renderer_swap()
back = (back + 1) & 1;
}
void renderer_clear()
{
memset(fbs[back].buf, 0, fbs[back].size);
}
void renderer_clear_rect(vec2_t centre, vec2_t size)
{
const vec2_t tl_world = { centre.x - size.x / 2, centre.y + size.y / 2 };
const vec2_t br_world = { centre.x + size.x / 2, centre.y - size.y / 2 };
const vec3_t tl = mat3_mul_vec3(view, vec2_extend(tl_world));
const vec3_t br = mat3_mul_vec3(view, vec2_extend(br_world));
const unsigned width = (unsigned)roundf(br.x / br.z - tl.x / tl.z);
const unsigned x1 = (unsigned)roundf(tl.x / tl.z);
const unsigned y1 = (unsigned)roundf(tl.y / tl.z);
const unsigned y2 = (unsigned)roundf(br.y / br.z);
for (unsigned y = y1; y < y2; ++y) {
uint32_t *row = fbs[back].buf + y * (fbs[back].pitch / 4) + x1;
memset(row, 0, width * sizeof(uint32_t));
}
}
void renderer_draw(
const vec2_t *vs, unsigned count, mat3_t model, bool connect)
{

View File

@@ -16,9 +16,11 @@ renderer_params_t renderer_init();
void renderer_cleanup();
void renderer_handle();
void renderer_clear();
void renderer_swap();
void renderer_clear();
void renderer_clear_rect(vec2_t centre, vec2_t size);
void renderer_draw(
const vec2_t *vs, unsigned count, mat3_t model, bool connect);