From 5cf3d9ddbaa9db2044b159db58379781fdf81ebd Mon Sep 17 00:00:00 2001 From: korenkonder Date: Sat, 23 Dec 2023 14:58:39 +0300 Subject: [PATCH] Moved some stuff a bit. Added `const` specifier --- src/DivaGL/mdl/disp_manager.cpp | 3 +-- src/DivaGL/mdl/draw_object.cpp | 29 ++++++++++++++++------------- src/DivaGL/mdl/draw_object.hpp | 5 ++--- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/DivaGL/mdl/disp_manager.cpp b/src/DivaGL/mdl/disp_manager.cpp index f9176a7..f476d67 100644 --- a/src/DivaGL/mdl/disp_manager.cpp +++ b/src/DivaGL/mdl/disp_manager.cpp @@ -1440,8 +1440,7 @@ namespace mdl { draw_sub_mesh(&i->args.sub_mesh, &i->mat, func); } break; case OBJ_KIND_ETC: { - draw_object_model_mat_load(i->mat); - draw_etc_obj(&i->args.etc); + draw_etc_obj(&i->args.etc, &i->mat); } break; case OBJ_KIND_USER: { i->args.user.func(i->args.user.data, &i->mat); diff --git a/src/DivaGL/mdl/draw_object.cpp b/src/DivaGL/mdl/draw_object.cpp index d0cb36c..28e6487 100644 --- a/src/DivaGL/mdl/draw_object.cpp +++ b/src/DivaGL/mdl/draw_object.cpp @@ -22,6 +22,7 @@ static void draw_object_material_set_parameter( const obj_material_data* mat_data); static void draw_object_material_set_reflect(const mdl::ObjSubMeshArgs* args); static void draw_object_material_set_uniform(const obj_material_data* mat_data, bool disable_color_l); +static void draw_object_model_mat_load(const mat4& mat); static void draw_object_vertex_attrib_reset_default(const mdl::ObjSubMeshArgs* args); static void draw_object_vertex_attrib_reset_reflect(const mdl::ObjSubMeshArgs* args); static void draw_object_vertex_attrib_set_default(const mdl::ObjSubMeshArgs* args); @@ -66,7 +67,7 @@ namespace mdl { draw_state->stats.draw_triangle_count += count - 2; } - void draw_etc_obj(mdl::EtcObj* etc) { + void draw_etc_obj(const mdl::EtcObj* etc, const mat4* mat) { switch (etc->type) { case mdl::ETC_OBJ_TEAPOT: case mdl::ETC_OBJ_GRID: @@ -88,6 +89,8 @@ namespace mdl { if (!vao) return; + draw_object_model_mat_load(*mat); + vec4 g_material_state_diffuse = rctx->obj_batch.g_material_state_diffuse; vec4 g_material_state_ambient = rctx->obj_batch.g_material_state_ambient; vec4 g_material_state_specular = rctx->obj_batch.g_material_state_specular; @@ -159,7 +162,7 @@ namespace mdl { rctx->obj_batch.g_blend_color = 1.0f; } - void draw_sub_mesh(const ObjSubMeshArgs* args, const mat4* model, + void draw_sub_mesh(const ObjSubMeshArgs* args, const mat4* mat, void(*func)(const ObjSubMeshArgs* args)) { GLuint vao = disp_manager->get_vertex_array(args); if (!vao) @@ -189,22 +192,22 @@ namespace mdl { uniform->arr[U_BONE_MAT] = 0; } else { - mat4 mat; + mat4 _mat; if (args->mesh->attrib.m.billboard) - model_mat_face_camera_view(&rctx->view_mat, model, &mat); + model_mat_face_camera_view(&rctx->view_mat, mat, &_mat); else if (args->mesh->attrib.m.billboard_y_axis) - model_mat_face_camera_position(&rctx->view_mat, model, &mat); + model_mat_face_camera_position(&rctx->view_mat, mat, &_mat); else - mat = *model; + _mat = *mat; uniform->arr[U_BONE_MAT] = 0; gl_state_bind_vertex_array(vao); if (func != draw_sub_mesh_default || !args->instances_count) { - draw_object_model_mat_load(mat); + draw_object_model_mat_load(_mat); func(args); } else - draw_sub_mesh_default_instanced(args, &mat); + draw_sub_mesh_default_instanced(args, &_mat); uniform->arr[U_BONE_MAT] = 0; } } @@ -490,11 +493,6 @@ namespace mdl { } } -inline void draw_object_model_mat_load(const mat4& mat) { - rctx->obj_batch.set_transforms(mat, rctx->view_mat, rctx->proj_mat); - rctx->obj_batch.set_g_joint(mat); -} - inline void model_mat_face_camera_position(const mat4* view, const mat4* src, mat4* dst) { mat4 mat; mat4_invert_fast(view, &mat); @@ -1009,6 +1007,11 @@ static void draw_object_material_set_uniform(const obj_material_data* mat_data, uniform->arr[U45] = 1; } +static void draw_object_model_mat_load(const mat4& mat) { + rctx->obj_batch.set_transforms(mat, rctx->view_mat, rctx->proj_mat); + rctx->obj_batch.set_g_joint(mat); +} + static void draw_object_vertex_attrib_reset_default(const mdl::ObjSubMeshArgs* args) { const obj_mesh* mesh = args->mesh; obj_vertex_format vertex_format = mesh->vertex_format; diff --git a/src/DivaGL/mdl/draw_object.hpp b/src/DivaGL/mdl/draw_object.hpp index 58a2bdc..b02f932 100644 --- a/src/DivaGL/mdl/draw_object.hpp +++ b/src/DivaGL/mdl/draw_object.hpp @@ -14,8 +14,8 @@ namespace mdl { extern void draw(obj_primitive_type primitive_type, uint32_t count, uint16_t start, uint16_t end, obj_index_format index_format, size_t indices); - extern void draw_etc_obj(mdl::EtcObj* etc); - extern void draw_sub_mesh(const ObjSubMeshArgs* args, const mat4* model, + extern void draw_etc_obj(const mdl::EtcObj* etc, const mat4* mat); + extern void draw_sub_mesh(const ObjSubMeshArgs* args, const mat4* mat, void(*func)(const ObjSubMeshArgs* args)); //extern void draw_sub_mesh_show_vector(const ObjSubMeshArgs* args, const mat4* model, int32_t show_vector); extern void draw_sub_mesh_default(const ObjSubMeshArgs* args); @@ -27,6 +27,5 @@ namespace mdl { extern void draw_sub_mesh_translucent(const ObjSubMeshArgs* args); }; -extern void draw_object_model_mat_load(const mat4& mat); extern void model_mat_face_camera_position(const mat4* view, const mat4* src, mat4* dst); extern void model_mat_face_camera_view(const mat4* view, const mat4* src, mat4* dst);