summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rendering/include/engine/rendering/rendering.h1
-rw-r--r--src/rendering/src/gl.c38
-rw-r--r--src/rendering/src/rendering.c3
-rw-r--r--src/resources/src/resources.c23
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;
}