Add renderer function to clear rectangle

This commit is contained in:
Camden Dixie O'Brien
2025-10-15 13:01:18 +01:00
parent addbe01755
commit f5f25a4463
2 changed files with 26 additions and 6 deletions

View File

@@ -125,11 +125,6 @@ void renderer_handle()
drmHandleEvent(drm_fd, &ev); drmHandleEvent(drm_fd, &ev);
} }
void renderer_clear()
{
memset(fbs[back].buf, 0, fbs[back].size);
}
void renderer_swap() void renderer_swap()
{ {
const int err = drmModePageFlip( const int err = drmModePageFlip(
@@ -141,6 +136,29 @@ void renderer_swap()
back = (back + 1) & 1; 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( void renderer_draw(
const vec2_t *vs, unsigned count, mat3_t model, bool connect) 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_cleanup();
void renderer_handle(); void renderer_handle();
void renderer_clear();
void renderer_swap(); void renderer_swap();
void renderer_clear();
void renderer_clear_rect(vec2_t centre, vec2_t size);
void renderer_draw( void renderer_draw(
const vec2_t *vs, unsigned count, mat3_t model, bool connect); const vec2_t *vs, unsigned count, mat3_t model, bool connect);