diff options
| author | Kasullian <tomkasull@gmail.com> | 2025-09-08 23:20:06 -0400 |
|---|---|---|
| committer | Kasullian <tomkasull@gmail.com> | 2025-09-08 23:20:06 -0400 |
| commit | ba6d14a7737ef7cd02b61586e39ca2162df3018d (patch) | |
| tree | bfca13d4e4dd539fc357583ebc0347ec0c1144d0 /src/render/gl.cpp | |
| parent | f8b92ce3aa08b1445c9f956d8166830946562d12 (diff) | |
glew, map parsing for windows
Diffstat (limited to 'src/render/gl.cpp')
| -rw-r--r-- | src/render/gl.cpp | 61 |
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; |
