Add renderer function to clear rectangle
This commit is contained in:
28
renderer.c
28
renderer.c
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user