summaryrefslogtreecommitdiff
path: root/src/render/gl.cpp
diff options
context:
space:
mode:
authorKasullian <tomkasull@gmail.com>2025-09-08 23:20:06 -0400
committerKasullian <tomkasull@gmail.com>2025-09-08 23:20:06 -0400
commitba6d14a7737ef7cd02b61586e39ca2162df3018d (patch)
treebfca13d4e4dd539fc357583ebc0347ec0c1144d0 /src/render/gl.cpp
parentf8b92ce3aa08b1445c9f956d8166830946562d12 (diff)
glew, map parsing for windows
Diffstat (limited to 'src/render/gl.cpp')
-rw-r--r--src/render/gl.cpp61
1 files changed, 42 insertions, 19 deletions
diff --git a/src/render/gl.cpp b/src/render/gl.cpp
index 915722e..6654dd4 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, // Use centered position
+ SDL_WINDOWPOS_CENTERED,
_canvas[0],
_canvas[1],
SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN
@@ -52,22 +52,40 @@ 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_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;
}
+ dlog( "OpenGL Version: %s\n", glGetString(GL_VERSION) );
+ dlog( "GLSL Version: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION) );
+ dlog( "Renderer: %s\n", glGetString(GL_RENDERER) );
+ dlog( "Vendor: %s\n", glGetString(GL_VENDOR) );
+
+ // Set up V-Sync (0 = off, 1 = on, -1 = adaptive)
+ SDL_GL_SetSwapInterval(1);
+
+ // Clear any OpenGL errors that might have occurred during initialization
+ while( glGetError() != GL_NO_ERROR );
+
glGetIntegerv( GL_MAX_TEXTURE_IMAGE_UNITS, &gl->shader_texture_limit );
if( gl->shader_texture_limit > 255 )
gl->shader_texture_limit = 255;
@@ -78,18 +96,28 @@ 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] };
+
+ // Set initial viewport
+ glViewport( 0, 0, gl->canvas_size[0], gl->canvas_size[1] );
+
+ // Set initial clear color (so you can see if clearing is working)
+ glClearColor( 0.2f, 0.2f, 0.2f, 1.0f );
gl_inst = gl;
return gl;
}
void gl_gen_buffers( GL_DATA* gl ) {
+ // Generate and bind VAO first
+ 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 );
+
+ glBindVertexArray( 0 ); // Unbind VAO
}
void gl_destroy( GL_DATA *gl ) {
@@ -131,7 +159,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 +182,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 );
}
@@ -287,7 +315,6 @@ GL_TEX2D* gl_texture_from_bitmap( GL_DATA* gl, const char* name, U8* bitmap, U32
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 +334,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;