From 397ec3ee681eb1055644a04e9fa6a9962972f69c Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Sat, 19 Dec 2020 14:02:57 -0500 Subject: [PATCH] enable world_transform in default shader path --- include/shader_program.h | 1 + src/default_shaders.cpp | 4 +++- src/entity.cpp | 2 -- src/render_object.cpp | 6 +++++- src/shader_program.cpp | 2 ++ 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/shader_program.h b/include/shader_program.h index 2376f69..a5c2819 100644 --- a/include/shader_program.h +++ b/include/shader_program.h @@ -11,6 +11,7 @@ struct default_shader_program GLuint program_id; GLuint model_matrix_id; + GLuint world_transform_id; GLuint view_matrix_id; GLuint projection_matrix_id; GLuint normal_matrix_id; diff --git a/src/default_shaders.cpp b/src/default_shaders.cpp index 206718c..8d89a8a 100644 --- a/src/default_shaders.cpp +++ b/src/default_shaders.cpp @@ -9,6 +9,7 @@ out vec3 fragVertex; out vec3 fragNormal; out vec2 fragUV; +uniform mat4 world_transform; uniform mat4 model; uniform mat4 view; uniform mat4 projection; @@ -19,7 +20,8 @@ void main() fragNormal = normal; fragVertex = vertexPosition_modelspace; fragUV = texCoord.st; - gl_Position = projection * view * model * vec4(vertexPosition_modelspace, 1); + gl_Position = projection * view * + world_transform * model * vec4(vertexPosition_modelspace, 1); } )VS"; diff --git a/src/entity.cpp b/src/entity.cpp index 4c9196f..b95bb85 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -35,8 +35,6 @@ entInitModel(entity& e, const char* model_path) bool entInitMesh(entity& e, simple_mesh* mesh, GLenum draw_mode) { - // TODO: test that this doesn't really do anything, then remove, and in - // entInitModel initDefaults(e); e.mesh = mesh; e.render_objs = roInitSimpleMesh(*e.mesh, draw_mode); diff --git a/src/render_object.cpp b/src/render_object.cpp index 3597723..48a00e1 100644 --- a/src/render_object.cpp +++ b/src/render_object.cpp @@ -52,6 +52,7 @@ bool initGLTexture(const util_image image, GLuint& tex_id); bool loadMeshIntoGL(default_render_object* ro_out, mesh_info* mi_in); inline void updateMatrices(default_shader_program* shader, camera& cam, + glm::mat4 world_xform, glm::mat4 node_xform); @@ -157,7 +158,7 @@ drawDefault(render_objects* r_objs, default_shader_program* shader = sw.default_shader; default_render_object* objects = (default_render_object*) r_objs->objects; glUseProgram(shader->program_id); - updateMatrices(shader, cam, objects->node_xform); + updateMatrices(shader, cam, world_transform, objects->node_xform); if (lights->needs_update) lightsUpdate(lights, shader); for (uint i = 0; i < r_objs->count; i++) { @@ -289,8 +290,11 @@ loadMeshIntoGL(default_render_object* ro_out, mesh_info* mi_in) inline void updateMatrices(default_shader_program* shader, camera& cam, + glm::mat4 world_xform, glm::mat4 node_xform) { + glUniformMatrix4fv( + shader->world_transform_id, 1, GL_FALSE, &world_xform[0][0]); glUniformMatrix4fv(shader->model_matrix_id, 1, GL_FALSE, &node_xform[0][0]); glUniformMatrix4fv(shader->view_matrix_id, 1, GL_FALSE, &cam.view[0][0]); glUniformMatrix4fv(shader->projection_matrix_id, 1, GL_FALSE, diff --git a/src/shader_program.cpp b/src/shader_program.cpp index f9c5499..ce7f05c 100644 --- a/src/shader_program.cpp +++ b/src/shader_program.cpp @@ -28,6 +28,8 @@ shaderInitDefault(const char* vertex_code, const char* frag_code) glBindVertexArray(sp->vertex_array_id); // assign uniforms + sp->world_transform_id = + glGetUniformLocation(sp->program_id, "world_transform"); sp->model_matrix_id = glGetUniformLocation(sp->program_id, "model"); sp->view_matrix_id = glGetUniformLocation(sp->program_id, "view"); sp->projection_matrix_id =