From 424d21e100af255e51e9f2d8442e80df2f701391 Mon Sep 17 00:00:00 2001 From: 0scar Date: Fri, 1 Mar 2024 08:17:23 +0100 Subject: Add normals --- src/rendering/include/engine/rendering/rendering.h | 9 ++++++++- src/rendering/src/gl.c | 6 +++++- src/rendering/src/rendering.c | 14 +++++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h index 3e11f0e..3acaedb 100644 --- a/src/rendering/include/engine/rendering/rendering.h +++ b/src/rendering/include/engine/rendering/rendering.h @@ -69,6 +69,9 @@ typedef struct { u32 ibo; /* Color (?) */ u32 col; + + /* norm */ + u32 normal; /* MVP (a uniform from the shader) */ u32 mvp; @@ -147,7 +150,11 @@ typedef struct { } data; } RenderDrawCall; -RenderObject RenderObject_new(float* model, Shader* shader, usize sz, float* uv, usize uv_sz, u32 texture); +RenderObject RenderObject_new(float* model, + Shader* shader, usize sz, + float* uv, usize uv_sz, + float* normal, usize normal_sz, + u32 texture); Shader compile_shader(const char* file_path, const ShaderType shader_type); Shader compose_shader(Shader *shaders, usize shaders_len); diff --git a/src/rendering/src/gl.c b/src/rendering/src/gl.c index 392ac23..327a81b 100644 --- a/src/rendering/src/gl.c +++ b/src/rendering/src/gl.c @@ -185,7 +185,7 @@ void shaders_delete(Shader* shader, isize shader_len) { } } -RenderObject RenderObject_new(float* model, Shader* shader, usize sz, float* uv, usize uv_sz, u32 texture) { +RenderObject RenderObject_new(float* model, Shader* shader, usize sz, float* uv, usize uv_sz, float* normal, usize normal_sz, u32 texture) { GladGLContext *gl = GLOBAL_PLATFORM->window->context; RenderObject o; @@ -202,6 +202,10 @@ RenderObject RenderObject_new(float* model, Shader* shader, usize sz, float* uv, gl->BindBuffer(GL_ARRAY_BUFFER, o.col); gl->BufferData(GL_ARRAY_BUFFER, uv_sz, uv, GL_STATIC_DRAW); + gl->GenBuffers(1, &(o.normal)); + gl->BindBuffer(GL_ARRAY_BUFFER, o.normal); + gl->BufferData(GL_ARRAY_BUFFER, normal_sz, normal, GL_STATIC_DRAW); + o.shader = *shader; o.texture = texture; diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c index 9e3cbe4..c00af68 100644 --- a/src/rendering/src/rendering.c +++ b/src/rendering/src/rendering.c @@ -108,7 +108,7 @@ void render_present(Window* w) { (void*)0 // array buffer offset ); - //// Do the color buffer (?) + //// Do the uv buffer (?) gl->EnableVertexAttribArray(1); gl->BindBuffer(GL_ARRAY_BUFFER, o->col); gl->VertexAttribPointer( @@ -120,6 +120,18 @@ void render_present(Window* w) { (void*)0 // array buffer offset ); + //// Do the normal buffer (?) + gl->EnableVertexAttribArray(2); + gl->BindBuffer(GL_ARRAY_BUFFER, o->normal); + gl->VertexAttribPointer( + 2, // attribute. No particular reason for 1, but must match the layout in the shader. + 3, // size + GL_FLOAT, // type + GL_FALSE, // normalized? + 0, // stride + (void*)0 // array buffer offset + ); + //// Draw the model ! -- cgit v1.3