diff options
| author | aura <nw@moneybot.cc> | 2026-03-10 01:35:50 +0100 |
|---|---|---|
| committer | aura <nw@moneybot.cc> | 2026-03-10 01:35:50 +0100 |
| commit | 8329d42d3e592f4cd42cdfa586e2325ddc76c898 (patch) | |
| tree | dec7e2a733bfc6b6384936c1f3ed067a42b59bb9 /src/render | |
| parent | 8ae8c85e9d3806cdb726e07f37e1b49484c5c48e (diff) | |
perf profiler, simplify 2d render, string struct, many small things
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/gl.cpp | 25 | ||||
| -rw-r--r-- | src/render/gl.h | 2 | ||||
| -rw-r--r-- | src/render/gl_2d.cpp | 60 | ||||
| -rw-r--r-- | src/render/gl_3d.cpp | 8 |
4 files changed, 56 insertions, 39 deletions
diff --git a/src/render/gl.cpp b/src/render/gl.cpp index 4e9ed9d..c1b6d19 100644 --- a/src/render/gl.cpp +++ b/src/render/gl.cpp @@ -19,11 +19,11 @@ GL_DATA* gl_instance() { return gl_inst; } -static void gl_apply_canvas_size( GL_DATA* gl, I32 width, I32 height ); -static void gl_handle_window_size_change( GL_DATA* gl, I32 width, I32 height ); -static void gl_update_screen_ratio_uniforms( GL_DATA* gl, I32 width, I32 height ); +void gl_apply_canvas_size( GL_DATA* gl, I32 width, I32 height ); +void gl_handle_window_size_change( GL_DATA* gl, I32 width, I32 height ); +void gl_update_screen_ratio_uniforms( GL_DATA* gl, I32 width, I32 height ); -static void gl_query_canvas_size( GL_DATA* gl, I32* width, I32* height ) { +void gl_query_canvas_size( GL_DATA* gl, I32* width, I32* height ) { I32 w = 0; I32 h = 0; if( gl && gl->window ) { @@ -36,7 +36,7 @@ static void gl_query_canvas_size( GL_DATA* gl, I32* width, I32* height ) { if( height ) *height = max( 1, h ); } -static void gl_constrain_window_size( I32* width, I32* height ) { +void gl_constrain_window_size( I32* width, I32* height ) { if( !width || !height ) return; @@ -61,7 +61,7 @@ static void gl_constrain_window_size( I32* width, I32* height ) { } } -static void gl_handle_window_size_change( GL_DATA* gl, I32 width, I32 height ) { +void gl_handle_window_size_change( GL_DATA* gl, I32 width, I32 height ) { if( !gl || !gl->window ) return; @@ -85,7 +85,7 @@ static void gl_handle_window_size_change( GL_DATA* gl, I32 width, I32 height ) { gl_apply_canvas_size( gl, draw_w, draw_h ); } -static I32 SDLCALL gl_event_filter( void* userdata, SDL_Event* e ) { +I32 SDLCALL gl_event_filter( void* userdata, SDL_Event* e ) { GL_DATA* gl = (GL_DATA*)userdata; if( !gl || !e ) return 1; @@ -106,7 +106,7 @@ static I32 SDLCALL gl_event_filter( void* userdata, SDL_Event* e ) { return 1; } -static void gl_apply_canvas_size( GL_DATA* gl, I32 width, I32 height ) { +void gl_apply_canvas_size( GL_DATA* gl, I32 width, I32 height ) { width = max( 1, width ); height = max( 1, height ); @@ -126,7 +126,7 @@ static void gl_apply_canvas_size( GL_DATA* gl, I32 width, I32 height ) { glUseProgram( 0 ); } -static void gl_update_screen_ratio_uniforms( GL_DATA* gl, I32 width, I32 height ) { +void gl_update_screen_ratio_uniforms( GL_DATA* gl, I32 width, I32 height ) { F32 screen_ratio[] = { 2.f / (F32)max( 1, width ), 2.f / (F32)max( 1, height ), @@ -486,13 +486,14 @@ STAT gl_endframe( GL_DATA* gl ) { // 1000 fps max be real while( true ) { U64 diff = u_tick() - gl->last_tick; - if( diff < 10 ) + if( diff < TICK_RESOLUTION / 1000 ) usleep( 10 ); else break; } - gl->frametime = (F32)(u_tick() - gl->last_tick) / 10000.0f; - gl->fps = 1.0f / gl->frametime; + F64 delta = (F64)(u_tick() - gl->last_tick) / TICK_RESOLUTION; + gl->frametime = (F32)delta; + gl->fps = 1.f / delta; input_frame_end(); return STAT_OK; diff --git a/src/render/gl.h b/src/render/gl.h index dfb76b3..b673d47 100644 --- a/src/render/gl.h +++ b/src/render/gl.h @@ -15,7 +15,7 @@ struct VERTEX { VEC2 pos; VEC2 uv; CLR clr; - U8 sampler; + U8 sampler = 255; }; struct GL_SHADER_DEF { diff --git a/src/render/gl_2d.cpp b/src/render/gl_2d.cpp index 78af1da..b5203b2 100644 --- a/src/render/gl_2d.cpp +++ b/src/render/gl_2d.cpp @@ -1,5 +1,6 @@ #include "gl_2d.h" #include "../util.h" +#include "gl.h" GL_SHADER_PROGRAM* gl_2d_init( GL_DATA* gl, VEC2 screensize, const char* shadername ) { GL_SHADER_PROGRAM* program = gl_program_create( gl, shadername ); @@ -41,9 +42,13 @@ void gl_2d_line( GL_SHADER_PROGRAM* gl2d, VEC2 start, VEC2 end, CLR col ) { I32 position = glGetAttribLocation( gl2d->id, "in_pos" ); glEnableVertexAttribArray( position ); glVertexAttribPointer( position, 2, GL_FLOAT, 0, sizeof(VERTEX), 0 ); - I32 color = glGetAttribLocation( gl2d->id, "in_col" ); + I32 color = glGetAttribLocation( gl2d->id, "in_clr" ); glEnableVertexAttribArray( color ); glVertexAttribPointer( color, 4, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->clr ); + I32 sampler = glGetAttribLocation( gl2d->id, "in_sampler" ); + glEnableVertexAttribArray( sampler ); + glVertexAttribPointer( sampler, 1, GL_UNSIGNED_BYTE, 1, sizeof(VERTEX), &( (VERTEX*)nullptr)->sampler ); + glBindBuffer( GL_ARRAY_BUFFER, 0 ); glDrawElements( GL_LINES, 2, GL_UNSIGNED_SHORT, order ); @@ -67,12 +72,16 @@ void gl_2d_rect( GL_SHADER_PROGRAM* gl2d, VEC2 origin, VEC2 dim, CLR col ) { I32 position = glGetAttribLocation( gl2d->id, "in_pos" ); glEnableVertexAttribArray( position ); glVertexAttribPointer( position, 2, GL_FLOAT, 0, sizeof(VERTEX), 0 ); - I32 color = glGetAttribLocation( gl2d->id, "in_col" ); + I32 color = glGetAttribLocation( gl2d->id, "in_clr" ); glEnableVertexAttribArray( color ); glVertexAttribPointer( color, 4, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->clr ); + I32 sampler = glGetAttribLocation( gl2d->id, "in_sampler" ); + glEnableVertexAttribArray( sampler ); + glVertexAttribPointer( sampler, 1, GL_UNSIGNED_BYTE, 1, sizeof(VERTEX), &( (VERTEX*)nullptr)->sampler ); + glBindBuffer( GL_ARRAY_BUFFER, 0 ); - glDrawElements( GL_LINE_STRIP, 5, GL_UNSIGNED_SHORT, order ); + glDrawElements( GL_LINE_STRIP, 5, GL_UNSIGNED_SHORT, order ); } void gl_2d_textured_frect( GL_SHADER_PROGRAM* gl2d, VEC2 origin, VEC2 dim, GL_TEX2D* texture, CLR col, VEC2* uv, F32 rotation ) { @@ -106,7 +115,7 @@ void gl_2d_textured_frect( GL_SHADER_PROGRAM* gl2d, VEC2 origin, VEC2 dim, GL_TE glBufferData( GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_DYNAMIC_DRAW ); I32 position = glGetAttribLocation( gl2d->id, "in_pos" ); - I32 color = glGetAttribLocation( gl2d->id, "in_col" ); + I32 color = glGetAttribLocation( gl2d->id, "in_clr" ); I32 texcoord = glGetAttribLocation( gl2d->id, "in_texcoord" ); I32 sampler = glGetAttribLocation( gl2d->id, "in_sampler" ); @@ -152,23 +161,21 @@ void gl_2d_frect( GL_SHADER_PROGRAM* gl2d, VEC2 origin, VEC2 dim, CLR col ) { glBufferData( GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_DYNAMIC_DRAW ); I32 position = glGetAttribLocation( gl2d->id, "in_pos" ); - I32 color = glGetAttribLocation( gl2d->id, "in_col" ); + I32 color = glGetAttribLocation( gl2d->id, "in_clr" ); - if (position >= 0) { - glEnableVertexAttribArray( position ); - glVertexAttribPointer( position, 2, GL_FLOAT, 0, sizeof(VERTEX), 0 ); - } - - if (color >= 0) { - glEnableVertexAttribArray( color ); - glVertexAttribPointer( color, 4, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->clr ); - } + glEnableVertexAttribArray( position ); + glVertexAttribPointer( position, 2, GL_FLOAT, 0, sizeof(VERTEX), 0 ); + + glEnableVertexAttribArray( color ); + glVertexAttribPointer( color, 4, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->clr ); I32 texcoord = glGetAttribLocation( gl2d->id, "in_texcoord" ); - if (texcoord >= 0) { - glEnableVertexAttribArray( texcoord ); - glVertexAttribPointer( texcoord, 2, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->uv ); - } + glEnableVertexAttribArray( texcoord ); + glVertexAttribPointer( texcoord, 2, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->uv ); + + I32 sampler = glGetAttribLocation( gl2d->id, "in_sampler" ); + glEnableVertexAttribArray( sampler ); + glVertexAttribPointer( sampler, 1, GL_UNSIGNED_BYTE, 1, sizeof(VERTEX), &( (VERTEX*)nullptr)->sampler ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); glDrawElements( GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, order ); @@ -205,9 +212,12 @@ void gl_2d_circle( GL_SHADER_PROGRAM* gl2d, VEC2 origin, F32 radius, CLR col, U3 I32 position = glGetAttribLocation( gl2d->id, "in_pos" ); glEnableVertexAttribArray( position ); glVertexAttribPointer( position, 2, GL_FLOAT, 0, sizeof(VERTEX), 0 ); - I32 color = glGetAttribLocation( gl2d->id, "in_col" ); + I32 color = glGetAttribLocation( gl2d->id, "in_clr" ); glEnableVertexAttribArray( color ); glVertexAttribPointer( color, 4, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->clr ); + I32 sampler = glGetAttribLocation( gl2d->id, "in_sampler" ); + glEnableVertexAttribArray( sampler ); + glVertexAttribPointer( sampler, 1, GL_UNSIGNED_BYTE, 1, sizeof(VERTEX), &( (VERTEX*)nullptr)->sampler ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); @@ -255,12 +265,15 @@ void gl_2d_fcircle( GL_SHADER_PROGRAM* gl2d, VEC2 origin, F32 radius, CLR col, U I32 position = glGetAttribLocation( gl2d->id, "in_pos" ); glEnableVertexAttribArray( position ); glVertexAttribPointer( position, 2, GL_FLOAT, 0, sizeof(VERTEX), 0 ); - I32 color = glGetAttribLocation( gl2d->id, "in_col" ); + I32 color = glGetAttribLocation( gl2d->id, "in_clr" ); glEnableVertexAttribArray( color ); glVertexAttribPointer( color, 4, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->clr ); I32 texcoord = glGetAttribLocation( gl2d->id, "in_texcoord" ); glEnableVertexAttribArray( texcoord ); glVertexAttribPointer( texcoord, 2, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->uv ); + I32 sampler = glGetAttribLocation( gl2d->id, "in_sampler" ); + glEnableVertexAttribArray( sampler ); + glVertexAttribPointer( sampler, 1, GL_UNSIGNED_BYTE, 1, sizeof(VERTEX), &( (VERTEX*)nullptr)->sampler ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); @@ -277,12 +290,15 @@ void gl_polygon( GL_SHADER_PROGRAM* gl2d, VERTEX* vertices, U32 vertices_count ) I32 position = glGetAttribLocation( gl2d->id, "in_pos" ); glEnableVertexAttribArray( position ); glVertexAttribPointer( position, 2, GL_FLOAT, 0, sizeof(VERTEX), 0 ); - I32 color = glGetAttribLocation( gl2d->id, "in_col" ); + I32 color = glGetAttribLocation( gl2d->id, "in_clr" ); glEnableVertexAttribArray( color ); glVertexAttribPointer( color, 4, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->clr ); I32 texcoord = glGetAttribLocation( gl2d->id, "in_texcoord" ); glEnableVertexAttribArray( texcoord ); glVertexAttribPointer( texcoord, 2, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->uv ); + I32 sampler = glGetAttribLocation( gl2d->id, "in_sampler" ); + glEnableVertexAttribArray( sampler ); + glVertexAttribPointer( sampler, 1, GL_UNSIGNED_BYTE, 1, sizeof(VERTEX), &( (VERTEX*)nullptr)->sampler ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); @@ -309,7 +325,7 @@ void gl_textured_polygon( I32 position = glGetAttribLocation( gl2d->id, "in_pos" ); glEnableVertexAttribArray( position ); glVertexAttribPointer( position, 2, GL_FLOAT, 0, sizeof(VERTEX), 0 ); - I32 color = glGetAttribLocation( gl2d->id, "in_col" ); + I32 color = glGetAttribLocation( gl2d->id, "in_clr" ); glEnableVertexAttribArray( color ); glVertexAttribPointer( color, 4, GL_FLOAT, 0, sizeof(VERTEX), &( (VERTEX*)nullptr)->clr ); I32 texcoord = glGetAttribLocation( gl2d->id, "in_texcoord" ); diff --git a/src/render/gl_3d.cpp b/src/render/gl_3d.cpp index 8449500..85e89b9 100644 --- a/src/render/gl_3d.cpp +++ b/src/render/gl_3d.cpp @@ -178,10 +178,10 @@ void build_plane( VERTEX3D* v, VEC3 pos, VEC2 size, VEC2 rot, CLR col ) { { 0.0f, 0.0f } }; - v[0] = { .pos = { vertices[0].x, vertices[0].z, vertices[0].y }, .uv = uvs[0], .clr = col, .sampler = 0 }; - v[1] = { .pos = { vertices[1].x, vertices[1].z, vertices[1].y }, .uv = uvs[1], .clr = col, .sampler = 0 }; - v[2] = { .pos = { vertices[2].x, vertices[2].z, vertices[2].y }, .uv = uvs[2], .clr = col, .sampler = 0 }; - v[3] = { .pos = { vertices[3].x, vertices[3].z, vertices[3].y }, .uv = uvs[3], .clr = col, .sampler = 0 }; + v[0] = { .pos = { vertices[0].x, vertices[0].z, vertices[0].y }, .uv = uvs[0], .clr = col }; + v[1] = { .pos = { vertices[1].x, vertices[1].z, vertices[1].y }, .uv = uvs[1], .clr = col }; + v[2] = { .pos = { vertices[2].x, vertices[2].z, vertices[2].y }, .uv = uvs[2], .clr = col }; + v[3] = { .pos = { vertices[3].x, vertices[3].z, vertices[3].y }, .uv = uvs[3], .clr = col }; } void gl_3d_plane( |
