diff options
| author | onelin <oscar@nelin.dk> | 2025-11-29 21:48:56 +0000 |
|---|---|---|
| committer | onelin <oscar@nelin.dk> | 2025-12-18 21:14:15 +0000 |
| commit | a184c285d0854ba0a0d0bf9032c4b4e680b257d6 (patch) | |
| tree | 7b1b6d966eb03ec5eae654a5db15136258f0440e | |
| parent | 7649615f710754582dcd6f9d17be30ad4682ca40 (diff) | |
Add compile_shader for source strings
| -rw-r--r-- | src/gl.c | 66 | ||||
| -rw-r--r-- | src/include/daw/rendering.h | 3 |
2 files changed, 40 insertions, 29 deletions
@@ -22,22 +22,13 @@ const char* ShaderType_str[] = { [Shader_Compute] = "Shader_Compute", }; -Shader compile_shader(const char* file_path, const ShaderType shader_type) { - u32 shaderID = 0; - GLenum shadertype = GL_INVALID_ENUM; +Shader compile_shader(const char* source, const ShaderType shader_type) { + const GladGLContext* gl = GLOBAL_PLATFORM->window->context; i32 Result = GL_FALSE; i32 infolog_len; - char* source = NULL; - FILE* file = NULL; - - const GladGLContext* gl = GLOBAL_PLATFORM->window->context; - - if (file_path == NULL) { - WARN("Empty path to shader"); - return (Shader){.program = 0, .type = Shader_Error}; - } + GLenum shadertype = GL_INVALID_ENUM; switch (shader_type) { case Shader_Vertex: @@ -46,14 +37,44 @@ Shader compile_shader(const char* file_path, const ShaderType shader_type) { case Shader_Fragment: shadertype = GL_FRAGMENT_SHADER; break; - default: break; + default: + UNIMPLEMENTED; + break; } - file = fopen(file_path, "r"); - - shaderID = gl->CreateShader(shadertype); + u32 shaderID = gl->CreateShader(shadertype); LOG("CREATED SHADER ID %d", shaderID); + char const* src_ptr = source; + gl->ShaderSource(shaderID, 1, &src_ptr , NULL); + gl->CompileShader(shaderID); + + // Check shader + gl->GetShaderiv(shaderID, GL_COMPILE_STATUS, &Result); + gl->GetShaderiv(shaderID, GL_INFO_LOG_LENGTH, &infolog_len); + if (infolog_len > 0) { + char* msg = calloc((usize)infolog_len + 1, sizeof(char)); + gl->GetShaderInfoLog(shaderID, infolog_len, NULL, msg); + ERROR("Failed to compile shader: " TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET, msg); + free(msg); + } + + return (Shader){.program = shaderID, .type = shader_type}; +} + +Shader compile_shader_f(const char* file_path, const ShaderType shader_type) { + u32 shaderID = 0; + + char* source = NULL; + FILE* file = NULL; + + if (file_path == NULL) { + WARN("Empty path to shader"); + return (Shader){.program = 0, .type = Shader_Error}; + } + + file = fopen(file_path, "r"); + if(file != NULL) { const usize size = f_get_sz(file); @@ -70,19 +91,8 @@ Shader compile_shader(const char* file_path, const ShaderType shader_type) { // Compile shader INFO("Compiling shader \"" TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET"\".", file_path); - char const* src_ptr = source; - gl->ShaderSource(shaderID, 1, &src_ptr , NULL); - gl->CompileShader(shaderID); - // Check shader - gl->GetShaderiv(shaderID, GL_COMPILE_STATUS, &Result); - gl->GetShaderiv(shaderID, GL_INFO_LOG_LENGTH, &infolog_len); - if ( infolog_len > 0 ) { - char* msg = calloc((usize)infolog_len + 1, sizeof(char)); - gl->GetShaderInfoLog(shaderID, infolog_len, NULL, msg); - ERROR("Failed to compile shader: " TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET, msg); - free(msg); - } + compile_shader(source, shader_type); free(source); diff --git a/src/include/daw/rendering.h b/src/include/daw/rendering.h index 17d3728..590bcb6 100644 --- a/src/include/daw/rendering.h +++ b/src/include/daw/rendering.h @@ -315,7 +315,8 @@ i32 renderbatch_add(RenderBatch* renderbatch, RenderObject* obj, Transform* t); void renderbatch_transform(RenderBatch* renderbatch, usize obj_idx, Transform* t); int renderbatch_refresh(RenderBatch* renderbatch); -Shader compile_shader(const char* file_path, const ShaderType shader_type); +Shader compile_shader(const char* source, const ShaderType shader_type); +Shader compile_shader_f(const char* file_path, const ShaderType shader_type); Shader compose_shader(Shader *shaders, usize shaders_len); void shaders_delete(Shader* shader, usize shader_len); |
