summaryrefslogtreecommitdiff
path: root/src/render/gl.cpp
diff options
context:
space:
mode:
authornavewindre <boneyaard@gmail.com>2025-11-28 14:41:22 +0100
committerGitHub <noreply@github.com>2025-11-28 14:41:22 +0100
commit9c05c795d7b59c5ab94fb769f315c712b37df0cd (patch)
tree16cccf8cbb88703de798066a06f94013f89a8a5a /src/render/gl.cpp
parentf8b92ce3aa08b1445c9f956d8166830946562d12 (diff)
parent3e094f20d4dda90e0356aba3f0abc4b7c7015844 (diff)
Merge pull request #1 from navewindre/windows-compat
Windows compat
Diffstat (limited to 'src/render/gl.cpp')
-rw-r--r--src/render/gl.cpp62
1 files changed, 32 insertions, 30 deletions
diff --git a/src/render/gl.cpp b/src/render/gl.cpp
index 915722e..e44a165 100644
--- a/src/render/gl.cpp
+++ b/src/render/gl.cpp
@@ -29,7 +29,7 @@ GL_DATA* gl_create( I32* _canvas ) {
return 0;
}
- SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES );
+ SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE );
SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 3 );
SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 2 );
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
@@ -43,8 +43,8 @@ GL_DATA* gl_create( I32* _canvas ) {
GL_DATA* gl = new GL_DATA;
gl->window = SDL_CreateWindow(
"game",
- 0,
- 0,
+ SDL_WINDOWPOS_CENTERED,
+ SDL_WINDOWPOS_CENTERED,
_canvas[0],
_canvas[1],
SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN
@@ -52,22 +52,32 @@ GL_DATA* gl_create( I32* _canvas ) {
if( !gl->window ) {
dlog( "gl_init() could not create window: %s\n", SDL_GetError() );
- return 0;
- }
-
- U32 renderer_flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE;
- gl->renderer = SDL_CreateRenderer( gl->window, -1, renderer_flags );
- if( !gl->renderer ) {
- dlog( "gl_init() could not create renderer: %s\n", SDL_GetError() );
+ delete gl;
return 0;
}
gl->ctx = SDL_GL_CreateContext( gl->window );
if( !gl->ctx ) {
dlog( "gl_init() could not create context: %s\n", SDL_GetError() );
+ SDL_DestroyWindow( gl->window );
+ delete gl;
+ return 0;
+ }
+
+ SDL_GL_SetSwapInterval(0);
+ SDL_GL_MakeCurrent( gl->window, gl->ctx );
+
+ GLenum glewError = glewInit();
+ if( glewError != GLEW_OK ) {
+ dlog( "gl_create() : Failed to initialize GLEW: %s\n", glewGetErrorString(glewError) );
+ SDL_GL_DeleteContext( gl->ctx );
+ SDL_DestroyWindow( gl->window );
+ delete gl;
return 0;
}
+ while( glGetError() != GL_NO_ERROR ); // clear errors
+ //
glGetIntegerv( GL_MAX_TEXTURE_IMAGE_UNITS, &gl->shader_texture_limit );
if( gl->shader_texture_limit > 255 )
gl->shader_texture_limit = 255;
@@ -78,17 +88,19 @@ GL_DATA* gl_create( I32* _canvas ) {
memcpy( gl->canvas_size, _canvas, sizeof(I32) * 2 );
gl->clip_start = { 0, 0 };
gl->clip_dim = { (F32)gl->canvas_size[0], (F32)gl->canvas_size[1] };
+ glViewport( 0, 0, gl->canvas_size[0], gl->canvas_size[1] );
gl_inst = gl;
return gl;
}
void gl_gen_buffers( GL_DATA* gl ) {
- glGenBuffers( 1, &gl->vbuffer );
+ glGenVertexArrays( 1, &gl->vao );
+ glBindVertexArray( gl->vao );
+ glGenBuffers( 1, &gl->vbuffer );
glBindBuffer( GL_ARRAY_BUFFER, gl->vbuffer );
glBufferData( GL_ARRAY_BUFFER, 8192, 0, GL_STATIC_DRAW );
-
glBindBuffer( GL_ARRAY_BUFFER, 0 );
}
@@ -131,7 +143,7 @@ void gl_update_window( GL_DATA* gl, I32* size ) {
glUseProgram( 0 );
}
-STAT gl_shader_compile( GL_DATA* gl, GL_SHADER* shader ) {
+STAT gl_shader_compile( GL_DATA* gl, GL_SHADER_DEF* shader ) {
static char* log_buf = 0;
if( !log_buf )
log_buf = (char*)malloc( 8192 );
@@ -154,7 +166,7 @@ STAT gl_shader_compile( GL_DATA* gl, GL_SHADER* shader ) {
return STAT_OK;
}
-void gl_shader_destroy( GL_DATA* gl, GL_SHADER* shader ) {
+void gl_shader_destroy( GL_DATA* gl, GL_SHADER_DEF* shader ) {
if( shader->code )
free( (void*)shader->code );
}
@@ -264,7 +276,7 @@ GL_TEX2D* gl_texture_from_file( GL_DATA* gl, const char* name ) {
return tex;
}
-GL_TEX2D* gl_texture_from_bitmap( GL_DATA* gl, const char* name, U8* bitmap, U32 width, U32 height ) {
+GL_TEX2D* gl_texture_from_bitmap( GL_DATA* gl, const char* name, U8* bitmap, U32 w, U32 h ) {
GL_TEX2D* tex = gl_texture_create( gl, name );
glBindTexture( GL_TEXTURE_2D, tex->id );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
@@ -272,22 +284,16 @@ GL_TEX2D* gl_texture_from_bitmap( GL_DATA* gl, const char* name, U8* bitmap, U32
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- tex->width = width;
- tex->height = height;
-
- glTexImage2D(
- GL_TEXTURE_2D,
- 0, GL_RGBA,
- (I32)width, (I32)height, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, bitmap
- );
-
+ glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmap );
+ glGenerateMipmap( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, 0 );
+ tex->width = w;
+ tex->height = h;
+
return tex;
}
-
GL_TEX2D* gl_texture_create( GL_DATA* gl, const char* name ) {
GL_TEX2D* tex = (GL_TEX2D*)malloc( sizeof(GL_TEX2D) );
strcpy( tex->name, name );
@@ -307,10 +313,6 @@ void gl_texture_destroy( GL_DATA* gl, GL_TEX2D* tex ) {
}
STAT gl_beginframe( GL_DATA* gl ) {
- SDL_SetRenderTarget( gl->renderer, 0 );
- SDL_SetRenderDrawColor( gl->renderer, 0, 0, 0, 255 );
- SDL_RenderClear( gl->renderer );
-
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
gl->last_tick = u_tick();
return STAT_OK;