diff options
Diffstat (limited to 'src')
| -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 | ||||
| -rw-r--r-- | src/resources/src/resources.c | 23 |
4 files changed, 48 insertions, 17 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; diff --git a/src/resources/src/resources.c b/src/resources/src/resources.c index 355fa70..89769c8 100644 --- a/src/resources/src/resources.c +++ b/src/resources/src/resources.c @@ -17,8 +17,8 @@ void* get_asset(Resources* r, u32 idx) { break; case Asset_shaderprog: - LOG("Idx: r->get[idx] = %d", r->get[idx]); - LOG("Ptr: &r->shader[r->get[idx]] = %z", &r->shader[r->get[idx]]); + LOG("Idx: r->get[%d] = %d", idx, r->get[idx]); + //LOG("Ptr: &r->shader[r->get[idx]] = %z", &r->shader[r->get[idx]]); return &r->shader[r->get[idx]]; case Asset_texture: @@ -96,16 +96,21 @@ i32 resources_load(Resources *resources) { guess_shadertype_from_filename(resources->assets[i].shader.path); const Shader s = compile_shader(resources->assets[i].shader.path, t); LOG("Compiled %s! (%s)", resources->assets[i].shader.path, ShaderType_str[t]); - imm_shader[shader_len++] = s; + + imm_shader[shader_len] = s; + shader_len++; } break; case Asset_shaderprog: { const isize sz = resources->assets[i].shaderprog.shader_len; + const u32* shader_ids = resources->assets[i].shaderprog.shader; Shader* shaders = calloc(sz, sizeof(Shader)); for (int j = 0; j < sz; j++) { //DEBUG("shader[%d] = %d\n", j, imm_shader[resources->assets[i].shaderprog.shader[j]].program); //shaders[j] = imm_shader[resources->assets[i].shaderprog.shader[j]]; - shaders[j] = imm_shader[j]; + u32 shader_idx = shader_ids[j]; + //DEBUG("Idx: get[%d] = %d\n", shader_idx, imm_shader[resources->get[shader_idx]].program); + shaders[j] = imm_shader[resources->get[shader_idx]]; } const Shader s = compose_shader(shaders, sz); @@ -129,7 +134,17 @@ i32 resources_load(Resources *resources) { //resources->get[i] = idx; } + LOG("Total assets: %lu", resources->assets_len); + LOG(" Shaders: %lu", resources->shader_len); + LOG(" Textures: %lu", resources->texture_len); + + // Delete the immediate shaders + for (int i = 0; i < shader_len; i++) { + // glDeleteShader() + } + free(imm_shader); + shaders_delete(imm_shader, shader_len); return 0; } |
