summaryrefslogtreecommitdiff
path: root/src/rendering
diff options
context:
space:
mode:
Diffstat (limited to 'src/rendering')
-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
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;