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/gl_2d.cpp | |
| parent | 8ae8c85e9d3806cdb726e07f37e1b49484c5c48e (diff) | |
perf profiler, simplify 2d render, string struct, many small things
Diffstat (limited to 'src/render/gl_2d.cpp')
| -rw-r--r-- | src/render/gl_2d.cpp | 60 |
1 files changed, 38 insertions, 22 deletions
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" ); |
