add stats with f4 toggle

This commit is contained in:
asrael 2026-02-06 00:35:52 -06:00
parent a29a6018b8
commit 8c0777b547
7 changed files with 88 additions and 36 deletions

View file

@ -740,6 +740,7 @@ struct pxl8_renderer {
u32 scissor_w, scissor_h;
pxl8_shader_fn shader;
pxl8_gfx_stats stats;
};
struct pxl8_gfx_cmdbuf {
@ -782,6 +783,28 @@ void pxl8_renderer_set_shader(pxl8_renderer* r, pxl8_shader_fn fn) {
if (r) r->shader = fn;
}
void pxl8_renderer_update_stats(pxl8_renderer* r, f32 dt) {
if (!r) return;
r->stats.dt_accumulator += dt;
r->stats.frame_count++;
if (r->stats.frame_count >= 60) {
r->stats.fps = (f32)r->stats.frame_count / r->stats.dt_accumulator;
r->stats.raster_ms = ((f32)r->stats.raster_ns / (f32)r->stats.frame_count) / 1000000.0f;
r->stats.dt_accumulator = 0.0f;
r->stats.raster_ns = 0;
r->stats.frame_count = 0;
}
r->stats.draw_calls = 0;
r->stats.triangles = 0;
}
pxl8_gfx_stats* pxl8_renderer_get_stats(pxl8_renderer* r) {
return r ? &r->stats : NULL;
}
static u32 texture_byte_size(pxl8_gfx_texture_format fmt, u32 w, u32 h) {
switch (fmt) {
case PXL8_GFX_FORMAT_INDEXED8: return w * h;
@ -1090,6 +1113,7 @@ static void execute_draw(
pxl8_renderer* r,
const pxl8_gfx_cmd_draw* cmd
) {
r->stats.draw_calls++;
if (!VALID_BUF(r, cmd->vertex_buffer)) return;
bool use_indices = pxl8_gfx_handle_valid(cmd->index_buffer) && VALID_BUF(r, cmd->index_buffer);
if (!VALID_PASS(r, r->current_pass)) return;
@ -1186,6 +1210,7 @@ static void execute_draw(
bool is_wireframe = pip->desc.rasterizer.fill == PXL8_GFX_FILL_WIREFRAME;
for (u32 i = cmd->first_index; i < cmd->first_index + cmd->index_count; i += 3) {
r->stats.triangles++;
u16 i0, i1, i2;
if (use_indices) {
@ -1295,8 +1320,10 @@ static void execute_draw(
continue;
}
u64 raster_start = pxl8_get_ticks_ns();
rasterize_triangle(&setup, fb, zb, fb_w, shader, &pip->desc,
&shader_bindings, &shader_uniforms);
r->stats.raster_ns += pxl8_get_ticks_ns() - raster_start;
}
}
}