diff options
Diffstat (limited to 'src/rendering')
| -rw-r--r-- | src/rendering/include/engine/rendering/rendering.h | 1 | ||||
| -rw-r--r-- | src/rendering/src/gl.c | 38 | ||||
| -rw-r--r-- | src/rendering/src/rendering.c | 3 |
3 files changed, 29 insertions, 13 deletions
diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h index e6feab9..3e11f0e 100644 --- a/src/rendering/include/engine/rendering/rendering.h +++ b/src/rendering/include/engine/rendering/rendering.h @@ -151,6 +151,7 @@ RenderObject RenderObject_new(float* model, Shader* shader, usize sz, float* uv, Shader compile_shader(const char* file_path, const ShaderType shader_type); Shader compose_shader(Shader *shaders, usize shaders_len); +void shaders_delete(Shader* shader, isize shader_len); u32 ComposeShader(u32 *shaders, usize shaders_len); diff --git a/src/rendering/src/gl.c b/src/rendering/src/gl.c index a9cd800..fb45d76 100644 --- a/src/rendering/src/gl.c +++ b/src/rendering/src/gl.c @@ -141,8 +141,8 @@ GLuint load_shaders( gl->DetachShader(ProgramID, vertexShader.program); gl->DetachShader(ProgramID, fragmentShader.program); - gl->DeleteShader(vertexShader.program); - gl->DeleteShader(fragmentShader.program); + //gl->DeleteShader(vertexShader.program); + //gl->DeleteShader(fragmentShader.program); return ProgramID; } @@ -151,7 +151,6 @@ GLuint load_shaders( Shader compose_shader(Shader *shaders, usize shaders_len) { const GladGLContext* gl = GLOBAL_PLATFORM->window->context; GLint Result = GL_FALSE; - int InfoLogLength = 0; if (shaders_len == 0) { ERROR("No shaders provided!"); @@ -160,20 +159,31 @@ Shader compose_shader(Shader *shaders, usize shaders_len) { u32 prog = gl->CreateProgram(); + if (prog == 0) { + ERROR("Failed to create program!"); + return (Shader){.program = 0, .type = Shader_Error}; + } + for (int i = 0; i < shaders_len; i++) { - DEBUG("Attaching shader [%d] : %s (%d) = %d\n", i, ShaderType_str[shaders[i].type], shaders[i].type, shaders[i].program); gl->AttachShader(prog, shaders[i].program); + INFO("Attaching shader %d to %d", shaders[i].program, prog); } gl->LinkProgram(prog); // Check the program gl->GetProgramiv(prog, GL_LINK_STATUS, &Result); - gl->GetProgramiv(prog, GL_INFO_LOG_LENGTH, &InfoLogLength); - if ( InfoLogLength > 0 ) { - char* msg = calloc(InfoLogLength + 1, sizeof(char)); - gl->GetShaderInfoLog(prog, InfoLogLength, NULL, msg); - ERROR("(Compose) Compiling shader[%d]: " TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET, InfoLogLength, msg); + if (Result != GL_TRUE) { + // Get the size of the log + int log_len = 0; + int msg_len = 0; + gl->GetProgramiv(prog, GL_INFO_LOG_LENGTH, &log_len); + char* msg = calloc(log_len + 1, sizeof(char)); + + // Copy the log message(s) + gl->GetProgramInfoLog(prog, log_len, &msg_len, msg); + + ERROR("(Compose) Compiling shader:\n" TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET "\n", msg); free(msg); } @@ -184,12 +194,18 @@ Shader compose_shader(Shader *shaders, usize shaders_len) { return (Shader){.program = prog, .type = Shader_Program}; } +void shaders_delete(Shader* shader, isize shader_len) { + const GladGLContext* gl = GLOBAL_PLATFORM->window->context; + + for (isize i = 0; i < shader_len; i++) { + gl->DeleteShader(shader[i].program); + } +} + RenderObject RenderObject_new(float* model, Shader* shader, usize sz, float* uv, usize uv_sz, u32 texture) { GladGLContext *gl = GLOBAL_PLATFORM->window->context; RenderObject o; - //DEBUG("RenderObject got %d: %s\n", shader->program, ShaderType_str[shader->type]); - gl->GenVertexArrays(1, &(o.vao)); gl->BindVertexArray(o.vao); diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c index cf23b08..9e3cbe4 100644 --- a/src/rendering/src/rendering.c +++ b/src/rendering/src/rendering.c @@ -72,11 +72,10 @@ void render_present(Window* w) { vec3 pos; glm_vec3_copy(dc.data.model.pos, pos); + gl->UseProgram(o->shader.program); gl->ActiveTexture(GL_TEXTURE0); gl->BindTexture(GL_TEXTURE_2D, o->texture); - gl->UseProgram(o->shader.program); - { mat4 model = GLM_MAT4_IDENTITY_INIT; mat4 modelviewprojection; |
