summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/render')
-rw-r--r--src/render/gl.cpp25
-rw-r--r--src/render/gl.h2
-rw-r--r--src/render/gl_2d.cpp60
-rw-r--r--src/render/gl_3d.cpp8
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(