diff --git a/src/CRE/Glitter/glitter.cpp b/src/CRE/Glitter/glitter.cpp index 58eebdaf..d636232e 100644 --- a/src/CRE/Glitter/glitter.cpp +++ b/src/CRE/Glitter/glitter.cpp @@ -264,21 +264,21 @@ namespace Glitter { "User", }; - void axis_angle_from_vectors(vec3* axis, float_t* angle, const vec3* vec1, const vec3* vec2) { - *axis = vec3::cross(*vec1, *vec2); - *angle = vec3::length(*axis); + void axis_angle_from_vectors(vec3& axis, float_t& angle, const vec3& vec1, const vec3& vec2) { + axis = vec3::cross(vec1, vec2); + angle = vec3::length(axis); - if (*angle >= 0.000001f) - *angle = asinf(clamp_def(*angle, -1.0f, 1.0f)); + if (angle >= 0.000001f) + angle = asinf(clamp_def(angle, -1.0f, 1.0f)); else { - *angle = 0.0f; - *axis = vec3::cross(vec3(0.0f, 1.0f, 0.0f), *vec1); - if (vec3::length(*axis) < 0.000001f) - *axis = vec3::cross(vec3(0.0f, 0.0f, 1.0f), *vec1); + angle = 0.0f; + axis = vec3::cross(vec3(0.0f, 1.0f, 0.0f), vec1); + if (vec3::length(axis) < 0.000001f) + axis = vec3::cross(vec3(0.0f, 0.0f, 1.0f), vec1); } - if (vec3::dot(*vec1, *vec2) < 0.0f) - *angle = (float_t)M_PI - *angle; + if (vec3::dot(vec1, vec2) < 0.0f) + angle = (float_t)M_PI - angle; } #if !SHARED_GLITTER_BUFFER diff --git a/src/CRE/Glitter/glitter.hpp b/src/CRE/Glitter/glitter.hpp index fa2166c8..474a8d46 100644 --- a/src/CRE/Glitter/glitter.hpp +++ b/src/CRE/Glitter/glitter.hpp @@ -1728,7 +1728,7 @@ namespace Glitter { extern Random random; extern Counter counter; - extern void axis_angle_from_vectors(vec3* axis, float_t* angle, const vec3* vec0, const vec3* vec1); + extern void axis_angle_from_vectors(vec3& axis, float_t& angle, const vec3& vec0, const vec3& vec1); #if !SHARED_GLITTER_BUFFER extern void CreateBuffer(size_t max_count, bool is_quad, diff --git a/src/CRE/Glitter/render_group.cpp b/src/CRE/Glitter/render_group.cpp index 2d420f6c..0df84863 100644 --- a/src/CRE/Glitter/render_group.cpp +++ b/src/CRE/Glitter/render_group.cpp @@ -315,7 +315,7 @@ namespace Glitter { vec3 axis; float_t angle; - axis_angle_from_vectors(&axis, &angle, &vec1, &vec2); + axis_angle_from_vectors(axis, angle, vec1, vec2); mat4_mul_rotation(&mat, &axis, angle, &mat); } else @@ -339,7 +339,7 @@ namespace Glitter { vec3 axis; float_t angle; - axis_angle_from_vectors(&axis, &angle, &vec1, &vec2); + axis_angle_from_vectors(axis, angle, vec1, vec2); mat4_mul_rotation(&mat, &axis, angle, &mat); } return mat; @@ -670,7 +670,7 @@ namespace Glitter { vec3 axis; float_t angle; - axis_angle_from_vectors(&axis, &angle, &vec1, &vec2); + axis_angle_from_vectors(axis, angle, vec1, vec2); mat4 mat = mat4_identity; mat4_mul_rotation(&mat, &axis, angle, &mat); @@ -690,7 +690,7 @@ namespace Glitter { vec3 axis; float_t angle; - axis_angle_from_vectors(&axis, &angle, &vec1, &vec2); + axis_angle_from_vectors(axis, angle, vec1, vec2); mat4 mat = mat4_identity; mat4_mul_rotation(&mat, &axis, angle, &mat); @@ -712,7 +712,7 @@ namespace Glitter { vec3 axis; float_t angle; - axis_angle_from_vectors(&axis, &angle, &vec1, &vec2); + axis_angle_from_vectors(axis, angle, vec1, vec2); mat4 mat = mat4_identity; mat4_mul_rotation(&mat, &axis, angle, &mat); @@ -732,7 +732,7 @@ namespace Glitter { vec3 axis; float_t angle; - axis_angle_from_vectors(&axis, &angle, &vec1, &vec2); + axis_angle_from_vectors(axis, angle, vec1, vec2); mat4 mat = mat4_identity; mat4_mul_rotation(&mat, &axis, angle, &mat); diff --git a/src/CRE/Glitter/render_scene.cpp b/src/CRE/Glitter/render_scene.cpp index cd004553..31a77c80 100644 --- a/src/CRE/Glitter/render_scene.cpp +++ b/src/CRE/Glitter/render_scene.cpp @@ -2300,7 +2300,7 @@ namespace Glitter { elem->mat_draw = mat; if (disp_manager.entry_obj_by_object_info( - &mat, object_info, &elem->color, 0, local)) + mat, object_info, &elem->color, 0, local)) disp++; disp_manager.set_texture_transform(0, 0); diff --git a/src/CRE/auth_3d.cpp b/src/CRE/auth_3d.cpp index bcd8978a..f4170512 100644 --- a/src/CRE/auth_3d.cpp +++ b/src/CRE/auth_3d.cpp @@ -4771,7 +4771,7 @@ static void auth_3d_m_object_hrc_disp(auth_3d_m_object_hrc* moh, auth_3d* auth, if (i.mats.size()) disp_manager.entry_obj_by_object_info_object_skin( - i.object_info, 0, 0, auth->alpha, i.mats.data(), 0, 0, &i.model_transform.mat); + i.object_info, 0, 0, auth->alpha, i.mats.data(), 0, 0, i.model_transform.mat); } disp_manager.set_obj_flags(); @@ -6428,7 +6428,7 @@ static void auth_3d_object_disp(auth_3d_object* o, auth_3d* auth, render_context int32_t uid_name_length = (int32_t)o->uid_name.size(); if (uid_name_length <= 3) - disp_manager.entry_obj_by_object_info(&mat, o->object_info); + disp_manager.entry_obj_by_object_info(mat, o->object_info); else if (o->morph.curve) { float_t morph = o->morph.value; int32_t morph_int = (int32_t)morph; @@ -6443,9 +6443,9 @@ static void auth_3d_object_disp(auth_3d_object* o, auth_3d* auth, render_context sprintf_s(buf, sizeof(buf), "%.*s%03d", uid_name_length - 3, uid_name, morph_int); object_info obj_info = obj_db->get_object_info(buf); if (auth->alpha < 0.999f) - disp_manager.entry_obj_by_object_info(&mat, obj_info, auth->alpha); + disp_manager.entry_obj_by_object_info(mat, obj_info, auth->alpha); else - disp_manager.entry_obj_by_object_info(&mat, obj_info); + disp_manager.entry_obj_by_object_info(mat, obj_info); disp_manager.set_morph({}, 0.0f); } else { @@ -6456,17 +6456,17 @@ static void auth_3d_object_disp(auth_3d_object* o, auth_3d* auth, render_context object_info obj_info = obj_db->get_object_info(buf); if (obj_info.is_null()) obj_info = o->object_info; - disp_manager.entry_obj_by_object_info(&mat, obj_info); + disp_manager.entry_obj_by_object_info(mat, obj_info); } } else if (o->pattern.curve) { sprintf_s(buf, sizeof(buf), "%.*s%03d", uid_name_length - 3, uid_name, (int32_t)prj::roundf(o->pattern.value)); object_info obj_info = obj_db->get_object_info(buf); - disp_manager.entry_obj_by_object_info(&mat, obj_info); + disp_manager.entry_obj_by_object_info(mat, obj_info); } else - disp_manager.entry_obj_by_object_info(&mat, o->object_info); + disp_manager.entry_obj_by_object_info(mat, o->object_info); disp_manager.set_texture_transform(); disp_manager.set_texture_pattern(); @@ -6613,7 +6613,7 @@ static void auth_3d_object_hrc_disp(auth_3d_object_hrc* oh, auth_3d* auth, rende if (oh->mats.size()) disp_manager.entry_obj_by_object_info_object_skin( - oh->object_info, 0, 0, auth->alpha, oh->mats.data(), 0, 0, &mat); + oh->object_info, 0, 0, auth->alpha, oh->mats.data(), 0, 0, mat); disp_manager.set_obj_flags(); disp_manager.set_shadow_type(SHADOW_CHARA); diff --git a/src/CRE/effect.cpp b/src/CRE/effect.cpp index e0a13460..eab1a00d 100644 --- a/src/CRE/effect.cpp +++ b/src/CRE/effect.cpp @@ -2273,7 +2273,7 @@ void EffectFogRing::dest() { void EffectFogRing::disp() { if (enable && display) - rctx_ptr->disp_manager->entry_obj_user(&mat4_identity, + rctx_ptr->disp_manager->entry_obj_user(mat4_identity, (mdl::UserArgsFunc)draw_fog_particle, this, mdl::OBJ_TYPE_USER); } @@ -3114,7 +3114,7 @@ void EffectRipple::disp() { void EffectRipple::disp_particles(ripple_struct* data) { if (data->count > 0) - rctx_ptr->disp_manager->entry_obj_user(&mat4_identity, + rctx_ptr->disp_manager->entry_obj_user(mat4_identity, (mdl::UserArgsFunc)draw_ripple_particles, data, mdl::OBJ_TYPE_USER); } @@ -4045,7 +4045,7 @@ void water_particle::disp() { if (!splash) return; - rctx_ptr->disp_manager->entry_obj_user(&mat4_identity, + rctx_ptr->disp_manager->entry_obj_user(mat4_identity, (mdl::UserArgsFunc)draw_water_particle, this, mdl::OBJ_TYPE_TRANSLUCENT); if (effect_ripple && !effect_ripple->use_float_ripplemap) { diff --git a/src/CRE/mdl/disp_manager.cpp b/src/CRE/mdl/disp_manager.cpp index c8ab270f..37ec866c 100644 --- a/src/CRE/mdl/disp_manager.cpp +++ b/src/CRE/mdl/disp_manager.cpp @@ -209,23 +209,22 @@ namespace mdl { } - void ObjData::init_etc(DispManager* disp_manager, const mat4* mat, mdl::EtcObj* etc) { + void ObjData::init_etc(DispManager* disp_manager, const mat4& mat, const mdl::EtcObj& etc) { kind = mdl::OBJ_KIND_ETC; - this->mat = *mat; - args.etc = *etc; + this->mat = mat; + args.etc = etc; disp_manager->add_vertex_array(&args.etc, this->mat); } - void ObjData::init_sub_mesh(DispManager* disp_manager, const mat4* mat, float_t radius, - const obj_sub_mesh* sub_mesh, const obj_mesh* mesh, const obj_material_data* material, - const std::vector* textures, int32_t mat_count, const mat4* mats, - GLuint vertex_buffer, size_t vertex_buffer_offset, GLuint index_buffer, - const vec4& blend_color, const vec4& emission, GLuint morph_vertex_buffer, - size_t morph_vertex_buffer_offset, int32_t instances_count, const mat4* instances_mat, - void(*func)(const ObjSubMeshArgs*), const ObjSubMeshArgs* func_data) { + void ObjData::init_sub_mesh(DispManager* disp_manager, const mat4& mat, float_t radius, const obj_sub_mesh* sub_mesh, + const obj_mesh* mesh, const obj_material_data* material, const std::vector* textures, + int32_t mat_count, const mat4* mats, GLuint vertex_buffer, size_t vertex_buffer_offset, + GLuint index_buffer, const vec4& blend_color, const vec4& emission, GLuint morph_vertex_buffer, + size_t morph_vertex_buffer_offset, + int32_t instances_count, const mat4* instances_mat, draw_func func, const ObjSubMeshArgs* func_data) { kind = mdl::OBJ_KIND_NORMAL; - this->mat = *mat; + this->mat = mat; this->radius = radius; mdl::ObjSubMeshArgs* args = &this->args.sub_mesh; @@ -282,15 +281,15 @@ namespace mdl { disp_manager->add_vertex_array(args); } - void ObjData::init_translucent(const mat4* mat, ObjTranslucentArgs* translucent) { + void ObjData::init_translucent(const mat4& mat, const ObjTranslucentArgs& translucent) { kind = mdl::OBJ_KIND_TRANSLUCENT; - this->mat = *mat; - args.translucent = *translucent; + this->mat = mat; + args.translucent = translucent; } - void ObjData::init_user(const mat4* mat, UserArgsFunc func, void* data) { + void ObjData::init_user(const mat4& mat, UserArgsFunc func, void* data) { kind = OBJ_KIND_USER; - this->mat = *mat; + this->mat = mat; args.user.func = func; args.user.data = data; } @@ -1583,7 +1582,7 @@ namespace mdl { const vec3 up = { 0.0f, 1.0f, 0.0f }; vec3 axis; float_t angle; - Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir); + Glitter::axis_angle_from_vectors(axis, angle, up, dir); mat4 m = mat4_identity; mat4_mul_rotation(&m, &axis, angle, &m); @@ -1604,7 +1603,7 @@ namespace mdl { const vec3 up = { 0.0f, 1.0f, 0.0f }; vec3 axis; float_t angle; - Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir); + Glitter::axis_angle_from_vectors(axis, angle, up, dir); mat4 m = mat4_identity; mat4_mul_rotation(&m, &axis, angle, &m); @@ -1956,7 +1955,7 @@ namespace mdl { mat4 mat; mat4_translate(&i, &mat); - entry_obj_etc(&mat, &etc); + entry_obj_etc(mat, etc); } if (show_mat_center && type == OBJ_TYPE_TRANSLUCENT) @@ -1970,7 +1969,7 @@ namespace mdl { mat4 mat; mat4_translate(&i, &mat); - entry_obj_etc(&mat, &etc); + entry_obj_etc(mat, etc); } } @@ -2311,7 +2310,7 @@ namespace mdl { } static int32_t obj_axis_aligned_bounding_box_check_visibility( - const obj_axis_aligned_bounding_box* aabb, camera* cam, const mat4* mat) { + const obj_axis_aligned_bounding_box* aabb, camera* cam, const mat4& mat) { vec3 points[8]; points[0] = aabb->center + (aabb->size ^ vec3( 0.0f, 0.0f, 0.0f)); points[1] = aabb->center + (aabb->size ^ vec3(-0.0f, -0.0f, -0.0f)); @@ -2323,7 +2322,7 @@ namespace mdl { points[7] = aabb->center + (aabb->size ^ vec3(-0.0f, -0.0f, 0.0f)); mat4 view_mat; - mat4_mul(mat, &cam->view, &view_mat); + mat4_mul(&mat, &cam->view, &view_mat); for (int32_t i = 0; i < 8; i++) mat4_transform_point(&view_mat, &points[i], &points[i]); @@ -2354,14 +2353,14 @@ namespace mdl { } static int32_t obj_bounding_sphere_check_visibility(const obj_bounding_sphere* sphere, - CullingCheck* culling, camera* cam, const mat4* mat) { + CullingCheck* culling, camera* cam, const mat4& mat) { if (culling->func) return culling->func(sphere, &cam->view); vec3 center; - mat4_transform_point(mat, &sphere->center, ¢er); + mat4_transform_point(&mat, &sphere->center, ¢er); mat4_transform_point(&cam->view, ¢er, ¢er); - float_t radius = mat4_get_max_scale(mat) * sphere->radius; + float_t radius = mat4_get_max_scale(&mat) * sphere->radius; double_t min_depth = (double_t)center.z - (double_t)radius; double_t max_depth = (double_t)center.z + (double_t)radius; @@ -2390,12 +2389,12 @@ namespace mdl { return 2; } - bool DispManager::entry_obj(const ::obj* obj, obj_mesh_vertex_buffer* obj_vertex_buf, - obj_mesh_index_buffer* obj_index_buf, const mat4* mat, const std::vector* textures, - const vec4* blend_color, const mat4* bone_mat, const ::obj* object_morph, - obj_mesh_vertex_buffer* obj_morph_vertex_buf, int32_t instances_count, const mat4* instances_mat, - void(*func)(const ObjSubMeshArgs*), const ObjSubMeshArgs* func_data, bool enable_bone_mat, bool local) { - if (!obj_vertex_buf || !obj_index_buf) { + bool DispManager::entry_obj(const ::obj* obj, const mat4& mat, obj_mesh_vertex_buffer* obj_vert_buf, + obj_mesh_index_buffer* obj_index_buf, const std::vector* textures, const vec4* blend_color, + const mat4* bone_mat, const ::obj* obj_morph, obj_mesh_vertex_buffer* obj_morph_vert_buf, + int32_t instances_count, const mat4* instances_mat, + draw_func func, const ObjSubMeshArgs* func_data, bool enable_bone_mat, bool local) { + if (!obj_vert_buf || !obj_index_buf) { printf_debug("mdl::DispManager::entry_obj: no vertex or index object buffer to draw;\n"); printf_debug(" Object: %s\n", obj->name); return false; @@ -2412,14 +2411,14 @@ namespace mdl { culling.passed.objects++; for (int32_t i = 0; i < obj->num_mesh; i++) { - obj_mesh* mesh = &obj->mesh_array[i]; - obj_mesh* mesh_morph = 0; - if (obj_vertex_buf && obj_morph_vertex_buf) { - if (obj_vertex_buf[i].get_size() != obj_morph_vertex_buf[i].get_size()) + const obj_mesh* mesh = &obj->mesh_array[i]; + const obj_mesh* mesh_morph = 0; + if (obj_vert_buf && obj_morph_vert_buf) { + if (obj_vert_buf[i].get_size() != obj_morph_vert_buf[i].get_size()) continue; - if (object_morph && i < object_morph->num_mesh) - mesh_morph = &object_morph->mesh_array[i]; + if (obj_morph && i < obj_morph->num_mesh) + mesh_morph = &obj_morph->mesh_array[i]; } if (!local && object_culling && !instances_count && !bone_mat @@ -2436,8 +2435,8 @@ namespace mdl { int32_t translucent_priority_count = 0; for (int32_t j = 0; j < mesh->num_submesh; j++) { - obj_sub_mesh* sub_mesh = &mesh->submesh_array[j]; - obj_sub_mesh* sub_mesh_morph = 0; + const obj_sub_mesh* sub_mesh = &mesh->submesh_array[j]; + const obj_sub_mesh* sub_mesh_morph = 0; if (sub_mesh->attrib.m.cloth) continue; @@ -2455,13 +2454,13 @@ namespace mdl { if (!v32) { if (!mesh_morph || j >= mesh_morph->num_submesh) { - culling.culled.submesh_array++; + culling.culled.sub_meshes++; continue; } sub_mesh_morph = &mesh_morph->submesh_array[j]; if (!sub_mesh_morph) { - culling.culled.submesh_array++; + culling.culled.sub_meshes++; continue; } @@ -2476,13 +2475,13 @@ namespace mdl { } if (!v32) { - culling.culled.submesh_array++; + culling.culled.sub_meshes++; continue; } } } } - culling.passed.submesh_array++; + culling.passed.sub_meshes++; int32_t num_bone_index = sub_mesh->num_bone_index; const uint16_t* bone_index = sub_mesh->bone_index_array; @@ -2509,9 +2508,9 @@ namespace mdl { GLuint morph_vertex_buffer = 0; size_t morph_vertex_buffer_offset = 0; - if (obj_morph_vertex_buf) { - morph_vertex_buffer = obj_morph_vertex_buf[i].get_buffer(); - morph_vertex_buffer_offset = obj_morph_vertex_buf[i].get_offset(); + if (obj_morph_vert_buf) { + morph_vertex_buffer = obj_morph_vert_buf[i].get_buffer(); + morph_vertex_buffer_offset = obj_morph_vert_buf[i].get_offset(); } GLuint index_buffer = 0; @@ -2520,12 +2519,12 @@ namespace mdl { GLuint vertex_buffer = 0; size_t vertex_buffer_offset = 0; - if (obj_vertex_buf) { - vertex_buffer = obj_vertex_buf[i].get_buffer(); - vertex_buffer_offset = obj_vertex_buf[i].get_offset(); + if (obj_vert_buf) { + vertex_buffer = obj_vert_buf[i].get_buffer(); + vertex_buffer_offset = obj_vert_buf[i].get_offset(); } - if (!vertex_buffer || !index_buffer || obj_morph_vertex_buf && !morph_vertex_buffer) { + if (!vertex_buffer || !index_buffer || obj_morph_vert_buf && !morph_vertex_buffer) { printf_debug("mdl::DispManager::entry_obj: no vertex or index mesh buffer to draw;\n"); printf_debug(" Object: %s; Mesh: %s; Sub Mesh: %d\n", obj->name, mesh->name, j); continue; @@ -2755,7 +2754,7 @@ namespace mdl { ObjData* data = alloc_obj_data(OBJ_KIND_TRANSLUCENT); if (data) { - data->init_translucent(mat, &translucent_args); + data->init_translucent(mat, translucent_args); if (obj_flags & mdl::OBJ_ALPHA_ORDER_1) entry_list(OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1, data); else if (obj_flags & mdl::OBJ_ALPHA_ORDER_2) @@ -2771,7 +2770,7 @@ namespace mdl { return true; } - void DispManager::entry_obj_by_obj(const mat4* mat, + void DispManager::entry_obj_by_obj(const mat4& mat, const ::obj* obj, const std::vector* textures, obj_mesh_vertex_buffer* obj_vert_buf, obj_mesh_index_buffer* obj_index_buf, const mat4* bone_mat, float_t alpha) { if (!obj) @@ -2780,20 +2779,20 @@ namespace mdl { vec4 blend_color = { 1.0f, 1.0f, 1.0f, alpha }; vec4* blend_color_ptr = alpha < 1.0f ? &blend_color : 0; - entry_obj(obj, obj_vert_buf, obj_index_buf, mat, textures, blend_color_ptr, + entry_obj(obj, mat, obj_vert_buf, obj_index_buf, textures, blend_color_ptr, bone_mat, 0, 0, 0, 0, 0, 0, !!bone_mat); } - bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info) { + bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info) { return entry_obj_by_object_info(mat, obj_info, 0, 0, 0, 0, 0, 0, false); } - bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info, const mat4* bone_mat) { + bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info, const mat4* bone_mat) { vec4 blend_color = 1.0f; return entry_obj_by_object_info(mat, obj_info, &blend_color, bone_mat, 0, 0, 0, 0, true); } - bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info, const vec4* blend_color, + bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info, const vec4* blend_color, const mat4* bone_mat, int32_t instances_count, const mat4* instances_mat, void(*func)(const ObjSubMeshArgs*), const ObjSubMeshArgs* func_data, bool enable_bone_mat, bool local) { if (obj_info.id == -1 && obj_info.set_id == -1) @@ -2804,35 +2803,35 @@ namespace mdl { return false; std::vector* textures = objset_info_storage_get_obj_set_gentex(obj_info.set_id); - obj_mesh_vertex_buffer* obj_vertex_buffer = objset_info_storage_get_obj_mesh_vertex_buffer(obj_info); + obj_mesh_vertex_buffer* obj_vert_buffer = objset_info_storage_get_obj_mesh_vertex_buffer(obj_info); obj_mesh_index_buffer* obj_index_buffer = objset_info_storage_get_obj_mesh_index_buffer(obj_info); ::obj* obj_morph = 0; - obj_mesh_vertex_buffer* obj_morph_vertex_buffer = 0; + obj_mesh_vertex_buffer* obj_morph_vert_buffer = 0; if (morph.object.set_id != -1) { obj_morph = objset_info_storage_get_obj(morph.object); - obj_morph_vertex_buffer = objset_info_storage_get_obj_mesh_vertex_buffer(morph.object); + obj_morph_vert_buffer = objset_info_storage_get_obj_mesh_vertex_buffer(morph.object); } - return entry_obj(obj, obj_vertex_buffer, obj_index_buffer, - mat, textures, blend_color, bone_mat, obj_morph, obj_morph_vertex_buffer, + return entry_obj(obj, mat, obj_vert_buffer, obj_index_buffer, + textures, blend_color, bone_mat, obj_morph, obj_morph_vert_buffer, instances_count, instances_mat, func, func_data, enable_bone_mat, local); } - bool DispManager::entry_obj_by_object_info(const mat4* mat, + bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info, float_t alpha, const mat4* bone_mat) { vec4 blend_color = 1.0f; blend_color.w = alpha; return entry_obj_by_object_info(mat, obj_info, &blend_color, bone_mat, 0, 0, 0, 0, true); } - bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info, + bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info, float_t r, float_t g, float_t b, float_t a, const mat4* bone_mat, bool local) { vec4 blend_color = { r, g, b, a }; return entry_obj_by_object_info(mat, obj_info, &blend_color, bone_mat, 0, 0, 0, 0, true, local); } - bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info, + bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info, const vec4* blend_color, const mat4* bone_mat, bool local) { return entry_obj_by_object_info(mat, obj_info, blend_color, 0, 0, 0, 0, 0, false, local); } @@ -2853,14 +2852,14 @@ namespace mdl { return false; memmove(instances_mat, instances.data(), sizeof(mat4) * instances.size()); - return entry_obj_by_object_info(&mat4_identity, obj_info, a >= 0.0f ? &blend_color : (vec4*)0, + return entry_obj_by_object_info(mat4_identity, obj_info, a >= 0.0f ? &blend_color : (vec4*)0, 0, (int32_t)instances.size(), instances_mat, 0, 0, true); } void DispManager::entry_obj_by_object_info_object_skin(object_info obj_info, const std::vector* texture_pattern, const texture_data_struct* texture_data, float_t alpha, - const mat4* matrices, const mat4* ex_data_matrices, const mat4* mat, const mat4* global_mat) { + const mat4* matrices, const mat4* ex_data_matrices, const mat4* mat, const mat4& global_mat) { obj_skin* skin = objset_info_storage_get_obj_skin(obj_info); if (!skin) return; @@ -2914,13 +2913,13 @@ namespace mdl { } } - void DispManager::entry_obj_etc(const mat4* mat, EtcObj* etc, bool local) { + void DispManager::entry_obj_etc(const mat4& mat, const EtcObj& etc, bool local) { ObjData* data = alloc_obj_data(mdl::OBJ_KIND_ETC); if (!data) return; data->init_etc(this, mat, etc); - if (etc->color.a == 0xFF) { + if (etc.color.a == 0xFF) { if (!local && (obj_flags & OBJ_SHADOW)) entry_list((mdl::ObjType)(OBJ_TYPE_SHADOW_CHARA + shadow_type), data); entry_list(local ? OBJ_TYPE_OPAQUE_LOCAL : OBJ_TYPE_OPAQUE, data); @@ -2929,7 +2928,7 @@ namespace mdl { entry_list(local ? OBJ_TYPE_TRANSLUCENT_LOCAL : OBJ_TYPE_TRANSLUCENT, data); } - void DispManager::entry_obj_user(const mat4* mat, UserArgsFunc func, void* data, ObjType type) { + void DispManager::entry_obj_user(const mat4& mat, UserArgsFunc func, void* data, ObjType type) { ObjData* _data = alloc_obj_data(OBJ_KIND_USER); if (_data) { _data->init_user(mat, func, data); @@ -3206,7 +3205,7 @@ namespace mdl { chara_color = value; } - void DispManager::set_culling_finc(bool(*func)(const obj_bounding_sphere*, const mat4*)) { + void DispManager::set_culling_func(bool(*func)(const obj_bounding_sphere*, const mat4*)) { culling.func = func; } diff --git a/src/CRE/mdl/disp_manager.hpp b/src/CRE/mdl/disp_manager.hpp index 363c8a01..b641c199 100644 --- a/src/CRE/mdl/disp_manager.hpp +++ b/src/CRE/mdl/disp_manager.hpp @@ -64,6 +64,10 @@ struct texture_data_struct { }; namespace mdl { + struct ObjSubMeshArgs; + + typedef void(FASTCALL* draw_func)(const ObjSubMeshArgs* args); + enum EtcObjType { ETC_OBJ_TEAPOT = 0, ETC_OBJ_GRID, @@ -194,7 +198,7 @@ namespace mdl { texture_transform_struct texture_transform_array[TEXTURE_TRANSFORM_COUNT]; int32_t instances_count; const mat4* instances_mat; - void(*func)(const ObjSubMeshArgs*); + draw_func func; const ObjSubMeshArgs* func_data; ObjSubMeshArgs(); @@ -344,16 +348,15 @@ namespace mdl { ObjData(); ~ObjData(); - void init_etc(DispManager* disp_manager, const mat4* mat, mdl::EtcObj* etc); - void init_sub_mesh(DispManager* disp_manager, const mat4* mat, float_t radius, - const obj_sub_mesh* sub_mesh, const obj_mesh* mesh, const obj_material_data* material, - const std::vector* textures, int32_t mat_count, const mat4* mats, - GLuint vertex_buffer, size_t vertex_buffer_offset, GLuint index_buffer, - const vec4& blend_color, const vec4& emission, GLuint morph_vertex_buffer, - size_t morph_vertex_buffer_offset, int32_t instances_count, const mat4* instances_mat, - void(*func)(const ObjSubMeshArgs*), const ObjSubMeshArgs* func_data); - void init_translucent(const mat4* mat, ObjTranslucentArgs* translucent); - void init_user(const mat4* mat, UserArgsFunc func, void* data); + void init_etc(DispManager* disp_manager, const mat4& mat, const mdl::EtcObj& etc); + void init_sub_mesh(DispManager* disp_manager, const mat4& mat, float_t radius, const obj_sub_mesh* sub_mesh, + const obj_mesh* mesh, const obj_material_data* material, const std::vector* textures, + int32_t mat_count, const mat4* mats, GLuint vertex_buffer, size_t vertex_buffer_offset, + GLuint index_buffer, const vec4& blend_color, const vec4& emission, GLuint morph_vertex_buffer, + size_t morph_vertex_buffer_offset, + int32_t instances_count, const mat4* instances_mat, draw_func func, const ObjSubMeshArgs* func_data); + void init_translucent(const mat4& mat, const ObjTranslucentArgs& translucent); + void init_user(const mat4& mat, UserArgsFunc func, void* data); }; typedef std::list ObjList; @@ -362,7 +365,7 @@ namespace mdl { struct Info { int32_t objects; int32_t meshes; - int32_t submesh_array; + int32_t sub_meshes; }; Info passed; @@ -454,25 +457,24 @@ namespace mdl { void draw(mdl::ObjType type, int32_t depth_mask = 0, bool reflect_texture_mask = true, int32_t alpha = -1); /*void draw_show_vector(mdl::ObjType type, int32_t show_vector);*/ void entry_list(ObjType type, ObjData* data); - bool entry_obj(const ::obj* obj, obj_mesh_vertex_buffer* obj_vertex_buf, - obj_mesh_index_buffer* obj_index_buf, const mat4* mat, const std::vector* textures, - const vec4* blend_color, const mat4* bone_mat, const ::obj* object_morph, - obj_mesh_vertex_buffer* obj_morph_vertex_buf, int32_t instances_count, const mat4* instances_mat, - void(*func)(const mdl::ObjSubMeshArgs*), const ObjSubMeshArgs* func_data, - bool enable_bone_mat, bool local = false); - void entry_obj_by_obj(const mat4* mat, + bool entry_obj(const ::obj* obj, const mat4& mat, obj_mesh_vertex_buffer* obj_vert_buf, + obj_mesh_index_buffer* obj_index_buf, const std::vector* textures, const vec4* blend_color, + const mat4* bone_mat, const ::obj* obj_morph, obj_mesh_vertex_buffer* obj_morph_vert_buf, + int32_t instances_count, const mat4* instances_mat, + draw_func func, const ObjSubMeshArgs* func_data, bool enable_bone_mat, bool local = false); + void entry_obj_by_obj(const mat4& mat, const ::obj* obj, const std::vector* textures, obj_mesh_vertex_buffer* obj_vert_buf, obj_mesh_index_buffer* obj_index_buf, const mat4* bone_mat, float_t alpha); - bool entry_obj_by_object_info(const mat4* mat, object_info obj_info); - bool entry_obj_by_object_info(const mat4* mat, object_info obj_info, const mat4* bone_mat); - bool entry_obj_by_object_info(const mat4* mat, object_info obj_info, const vec4* blend_color, + bool entry_obj_by_object_info(const mat4& mat, object_info obj_info); + bool entry_obj_by_object_info(const mat4& mat, object_info obj_info, const mat4* bone_mat); + bool entry_obj_by_object_info(const mat4& mat, object_info obj_info, const vec4* blend_color, const mat4* bone_mat, int32_t instances_count, const mat4* instances_mat, void(*func)(const mdl::ObjSubMeshArgs*), const ObjSubMeshArgs* func_data, bool enable_bone_mat, bool local = false); - bool entry_obj_by_object_info(const mat4* mat, object_info obj_info, float_t alpha, const mat4* bone_mat = 0); - bool entry_obj_by_object_info(const mat4* mat, object_info obj_info, + bool entry_obj_by_object_info(const mat4& mat, object_info obj_info, float_t alpha, const mat4* bone_mat = 0); + bool entry_obj_by_object_info(const mat4& mat, object_info obj_info, float_t r, float_t g, float_t b, float_t a, const mat4* bone_mat = 0, bool local = false); - bool entry_obj_by_object_info(const mat4* mat, object_info obj_info, + bool entry_obj_by_object_info(const mat4& mat, object_info obj_info, const vec4* blend_color, const mat4* bone_mat = 0, bool local = false); bool entry_obj_by_object_info_instanced(object_info obj_info, const std::vector& instances, float_t alpha); @@ -481,9 +483,9 @@ namespace mdl { void entry_obj_by_object_info_object_skin(object_info obj_info, const std::vector* texture_pattern, const texture_data_struct* texture_data, float_t alpha, - const mat4* matrices, const mat4* ex_data_matrices, const mat4* mat, const mat4* global_mat); - void entry_obj_etc(const mat4* mat, EtcObj* etc, bool local = false); - void entry_obj_user(const mat4* mat, UserArgsFunc func, void* data, ObjType type); + const mat4* matrices, const mat4* ex_data_matrices, const mat4* mat, const mat4& global_mat); + void entry_obj_etc(const mat4& mat, const EtcObj& etc, bool local = false); + void entry_obj_user(const mat4& mat, UserArgsFunc func, void* data, ObjType type); GLuint get_vertex_array(const ObjSubMeshArgs* args); GLuint get_vertex_array(const EtcObj* etc); bool get_chara_color(); @@ -503,7 +505,7 @@ namespace mdl { void obj_sort(const mat4* view, ObjType type, int32_t compare_func, bool a3 = false); void refresh(); void set_chara_color(bool value = false); - void set_culling_finc(bool(*func)(const obj_bounding_sphere*, const mat4*) = 0); + void set_culling_func(bool(*func)(const obj_bounding_sphere*, const mat4*) = 0); void set_obj_flags(ObjFlags flags = (ObjFlags)0); void set_material_list(int32_t count = 0, const material_list_struct* value = 0); void set_morph(object_info object = {}, float_t weight = 0.0f); diff --git a/src/CRE/object.cpp b/src/CRE/object.cpp index 6664d126..d2fc5020 100644 --- a/src/CRE/object.cpp +++ b/src/CRE/object.cpp @@ -666,7 +666,7 @@ inline int32_t obj_material_texture_type_get_texture_index( } void obj_skin_set_matrix_buffer(const obj_skin* s, const mat4* matrices, - const mat4* ex_data_matrices, mat4* matrix_buffer, const mat4* mat, const mat4* global_mat) { + const mat4* ex_data_matrices, mat4* matrix_buffer, const mat4* mat, const mat4& global_mat) { if (!s->num_bone) return; @@ -679,7 +679,7 @@ void obj_skin_set_matrix_buffer(const obj_skin* s, const mat4* matrices, else mat4_mul(mat, &matrices[bone->id], &temp); - mat4_mul(&temp, global_mat, &temp); + mat4_mul(&temp, &global_mat, &temp); mat4_mul(&bone->inv_bind_pose_mat, &temp, matrix_buffer); } else @@ -690,7 +690,7 @@ void obj_skin_set_matrix_buffer(const obj_skin* s, const mat4* matrices, else temp = matrices[bone->id]; - mat4_mul(&temp, global_mat, &temp); + mat4_mul(&temp, &global_mat, &temp); mat4_mul(&bone->inv_bind_pose_mat, &temp, matrix_buffer); } } diff --git a/src/CRE/object.hpp b/src/CRE/object.hpp index 018d2fb1..a34e35af 100644 --- a/src/CRE/object.hpp +++ b/src/CRE/object.hpp @@ -111,7 +111,7 @@ extern int32_t obj_material_texture_type_get_texture_index( obj_material_texture_type type, int32_t base_index); extern void obj_skin_set_matrix_buffer(const obj_skin* s, const mat4* matrices, - const mat4* ex_data_matrices, mat4* matrix_buffer, const mat4* mat, const mat4* global_mat); + const mat4* ex_data_matrices, mat4* matrix_buffer, const mat4* mat, const mat4& global_mat); extern void object_material_msgpack_read(const char* path, const char* set_name, obj_set* obj_set); diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index f4f8ed95..0b1e0832 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -24,8 +24,6 @@ #include "static_var.hpp" #include "texture.hpp" -#define REFLECT_STENCIL (1) - extern render_context* rctx_ptr; bool reflect_draw = false; @@ -50,11 +48,6 @@ static int32_t draw_pass_3d_translucent_count_layers(render_context* rctx, static void draw_pass_3d_translucent_has_objects(render_context* rctx, bool* arr, mdl::ObjType type); static void draw_pass_reflect_full(rndr::RenderManager* render_manager); -#if REFLECT_STENCIL -static void draw_pass_reflect_stencil(render_context* rctx, mdl::ObjType type); -static void draw_pass_reflect_make_stencil(render_context* rctx, - RenderTexture& refl_tex, RenderTexture& refl_buf_tex); -#endif static void blur_filter_apply(render_context* rctx, RenderTexture* dst, RenderTexture* src, blur_filter_mode filter, const vec2 res_scale, const vec4 scale, const vec4 offset); @@ -76,11 +69,7 @@ namespace rndr { static const RenderTextureData render_manager_render_texture_data_array[] = { { GL_TEXTURE_2D, 0x200, 0x100, 0, GL_RGBA8 , GL_DEPTH_COMPONENT24 }, -#if REFLECT_STENCIL - { GL_TEXTURE_2D, 0x200, 0x100, 0, GL_RGBA16F, GL_DEPTH24_STENCIL8 }, -#else { GL_TEXTURE_2D, 0x200, 0x100, 0, GL_RGBA16F, GL_DEPTH_COMPONENT24 }, -#endif { GL_TEXTURE_2D, 0x400, 0x400, 0, GL_RGBA8 , GL_ZERO }, { GL_TEXTURE_2D, 0x400, 0x400, 0, GL_RGBA8 , GL_ZERO }, { GL_TEXTURE_2D, 0x400, 0x400, 0, GL_RGBA8 , GL_ZERO }, @@ -519,14 +508,7 @@ namespace rndr { //} glClearColor(sss->param.x, sss->param.y, sss->param.z, 0.0f); -#if REFLECT_STENCIL - glClearStencil(0x00); - gl_state_set_stencil_mask(0xFF); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - gl_state_set_stencil_mask(0x00); -#else glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -#endif draw_pass_set_camera(); for (int32_t i = LIGHT_SET_MAIN; i < LIGHT_SET_MAX; i++) @@ -713,26 +695,10 @@ namespace rndr { rctx->fog[i].data_set((fog_id)i); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); -#if REFLECT_STENCIL - glClearStencil(0x00); -#endif if (sv_better_reflect && rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_SSS)) glClear(GL_COLOR_BUFFER_BIT); -#if REFLECT_STENCIL - else { - gl_state_set_stencil_mask(0xFF); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - gl_state_set_stencil_mask(0x00); - } -#else else glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -#endif - -#if REFLECT_STENCIL - if (sv_better_reflect) - draw_pass_reflect_make_stencil(rctx, refl_tex, refl_buf_tex); -#endif rctx->draw_state->shader_index = SHADER_FT_S_REFL; @@ -822,11 +788,6 @@ namespace rndr { uniform_value[U_REFLECT] = 0; rctx->draw_state->shader_index = -1; -#if REFLECT_STENCIL - if (sv_better_reflect) - gl_state_disable_stencil_test(); -#endif - for (int32_t i = reflect_blur_num, j = 0; i > 0; i--, j++) { blur_filter_apply(rctx, &refl_buf_tex, &refl_tex, reflect_blur_filter, 1.0f, 1.0f, 0.0f); @@ -2040,25 +2001,10 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { rctx->fog[i].data_set((fog_id)i); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); -#if REFLECT_STENCIL - glClearStencil(0x00); -#endif if (rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_SSS)) glClear(GL_COLOR_BUFFER_BIT); -#if REFLECT_STENCIL - else { - gl_state_set_stencil_mask(0xFF); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - gl_state_set_stencil_mask(0x00); - } -#else else glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -#endif - -#if REFLECT_STENCIL - draw_pass_reflect_make_stencil(rctx, refl_tex, refl_buf_tex); -#endif gl_state_enable_depth_test(); gl_state_set_depth_func(GL_LEQUAL); @@ -2171,10 +2117,6 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { gl_state_set_cull_face_mode(GL_BACK); gl_state_disable_depth_test(); -#if REFLECT_STENCIL - gl_state_disable_stencil_test(); -#endif - for (int32_t i = render_manager->reflect_blur_num, j = 0; i > 0; i--, j++) { blur_filter_apply(rctx, &refl_buf_tex, &refl_tex, render_manager->reflect_blur_filter, 1.0f, 1.0f, 0.0f); @@ -2193,116 +2135,6 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { gl_state_end_event(); } -#if REFLECT_STENCIL -static void draw_pass_reflect_stencil(render_context* rctx, mdl::ObjType type) { - if (type < 0 || type >= mdl::OBJ_TYPE_MAX || rctx->disp_manager->get_obj_count(type) < 1) - return; - - int32_t alpha_test = 0; - float_t min_alpha = 1.0f; - float_t alpha_threshold = 0.0f; - - for (int32_t i = 0; i < 5; i++) - gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d->glid); - gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); - gl_state_active_texture(0); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - uniform_value_reset(); - gl_state_get(); - - switch (type) { - case mdl::OBJ_TYPE_TRANSLUCENT: - case mdl::OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS: - alpha_test = 1; - min_alpha = 0.0f; - alpha_threshold = 0.0f; - break; - case mdl::OBJ_TYPE_TRANSPARENT: - alpha_test = 1; - min_alpha = 0.1f; - alpha_threshold = 0.5f; - break; - default: - break; - } - rctx->set_batch_alpha_threshold(alpha_threshold); - rctx->set_batch_min_alpha(min_alpha); - uniform_value[U_ALPHA_TEST] = alpha_test; - - for (mdl::ObjData*& i : rctx->disp_manager->obj[type]) { - switch (i->kind) { - case mdl::OBJ_KIND_NORMAL: { - switch (i->args.sub_mesh.material->material.shader.index) { - case SHADER_FT_WATER01: - case SHADER_FT_FLOOR: - case SHADER_FT_PUDDLE: - draw_sub_mesh(rctx, &i->args.sub_mesh, &i->mat, mdl::draw_sub_mesh_default); - break; - } - } break; - case mdl::OBJ_KIND_TRANSLUCENT: { - for (int32_t j = 0; j < i->args.translucent.count; j++) - switch (i->args.translucent.sub_mesh[j]->material->material.shader.index) { - case SHADER_FT_WATER01: - case SHADER_FT_FLOOR: - case SHADER_FT_PUDDLE: - draw_sub_mesh(rctx, i->args.translucent.sub_mesh[j], &i->mat, mdl::draw_sub_mesh_default); - break; - } - } break; - } - } - - uniform_value_reset(); - gl_state_bind_vertex_array(0); - shader::unbind(); - gl_state_set_blend_func(GL_ONE, GL_ZERO); - for (int32_t i = 0; i < 5; i++) - gl_state_bind_sampler(i, 0); -} - -static void draw_pass_reflect_make_stencil(render_context* rctx, - RenderTexture& refl_tex, RenderTexture& refl_buf_tex) { - gl_state_set_stencil_mask(0xFF); - - rctx->draw_state->shader_index = SHADER_FT_SIL; - - gl_state_disable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); - - draw_pass_reflect_stencil(rctx, mdl::OBJ_TYPE_OPAQUE); - draw_pass_reflect_stencil(rctx, mdl::OBJ_TYPE_TRANSLUCENT); - draw_pass_reflect_stencil(rctx, mdl::OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS); - draw_pass_reflect_stencil(rctx, mdl::OBJ_TYPE_TRANSPARENT); - - fbo_blit(refl_tex.fbos[0], refl_buf_tex.fbos[0], - 0, 0, refl_tex.GetWidth(), refl_tex.GetHeight(), - 0, 0, refl_buf_tex.GetWidth(), refl_buf_tex.GetHeight(), - GL_COLOR_BUFFER_BIT, GL_LINEAR); - - refl_tex.Bind(); - glClear(GL_COLOR_BUFFER_BIT); - - gl_state_enable_stencil_test(); - gl_state_set_stencil_op(GL_KEEP, GL_KEEP, GL_REPLACE); - gl_state_set_stencil_func(GL_ALWAYS, 0x01, 0x01); - - gl_state_bind_texture_2d(refl_buf_tex.GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[0]); - - gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - shaders_ft.set(SHADER_FT_REFLECT_STENCIL); - rctx->render.draw_quad(refl_buf_tex.GetWidth(), refl_buf_tex.GetHeight(), 1.0f, 1.0f, - 0.0f, 0.0f, 6.0f, 1.0f, 1.0f, 1.0f, 1.0f); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - - gl_state_set_stencil_op(GL_KEEP, GL_KEEP, GL_KEEP); - gl_state_set_stencil_func(GL_EQUAL, 0x01, 0x01); - - gl_state_set_stencil_mask(0x00); -} -#endif - static void blur_filter_apply(render_context* rctx, RenderTexture* dst, RenderTexture* src, blur_filter_mode filter, const vec2 res_scale, const vec4 scale, const vec4 offset) { if (!dst || !src) diff --git a/src/CRE/rob/ex_block.cpp b/src/CRE/rob/ex_block.cpp index 23b73c74..88f24c0f 100644 --- a/src/CRE/rob/ex_block.cpp +++ b/src/CRE/rob/ex_block.cpp @@ -200,7 +200,7 @@ void ExNullBlock::CtrlOsagePlayData() { CtrlMain(); } -void ExNullBlock::Disp(const mat4* mat, render_context* rctx) { +void ExNullBlock::Disp(const mat4& mat, render_context* rctx) { } @@ -1527,7 +1527,7 @@ void RobCloth::CtrlStep(const float_t step) { CollideNodes(step, true); } -void RobCloth::Disp(const mat4* mat, render_context* rctx) { +void RobCloth::Disp(const mat4& mat, render_context* rctx) { obj* obj = objset_info_storage_get_obj(itm_eq_obj->obj_info); if (!obj) return; @@ -2133,7 +2133,7 @@ void ExClothBlock::CtrlOsagePlayData() { rob.CtrlOsagePlayData(item_equip_object->item_equip->opd_blend_data); } -void ExClothBlock::Disp(const mat4* mat, render_context* rctx) { +void ExClothBlock::Disp(const mat4& mat, render_context* rctx) { rob.UpdateDisp(); rob.Disp(mat, rctx); } @@ -3155,7 +3155,7 @@ void ExOsageBlock::CtrlOsagePlayData() { parent_bone_node->exp_data.parent_scale, item_equip_object->item_equip->opd_blend_data); } -void ExOsageBlock::Disp(const mat4* mat, render_context* rctx) { +void ExOsageBlock::Disp(const mat4& mat, render_context* rctx) { } @@ -3334,7 +3334,7 @@ void ExConstraintBlock::CtrlOsagePlayData() { CtrlMain(); } -void ExConstraintBlock::Disp(const mat4* mat, render_context* rctx) { +void ExConstraintBlock::Disp(const mat4& mat, render_context* rctx) { } @@ -3584,7 +3584,7 @@ void ExExpressionBlock::CtrlOsagePlayData() { CtrlMain(); } -void ExExpressionBlock::Disp(const mat4* mat, render_context* rctx) { +void ExExpressionBlock::Disp(const mat4& mat, render_context* rctx) { } diff --git a/src/CRE/rob/rob.cpp b/src/CRE/rob/rob.cpp index af3661e7..27572090 100644 --- a/src/CRE/rob/rob.cpp +++ b/src/CRE/rob/rob.cpp @@ -13348,7 +13348,7 @@ void rob_chara_item_equip_object::clear_ex_data() { node_blocks.clear(); } -void rob_chara_item_equip_object::disp(const mat4* mat, render_context* rctx) { +void rob_chara_item_equip_object::disp(const mat4& mat, render_context* rctx) { if (obj_info.is_null()) return; @@ -13990,7 +13990,7 @@ static void sub_140512C20(rob_chara_item_equip* rob_itm_equip, render_context* r int32_t tex_pat_count = (int32_t)rob_itm_equip->texture_pattern.size(); if (tex_pat_count) rctx->disp_manager->set_texture_pattern(tex_pat_count, rob_itm_equip->texture_pattern.data()); - rctx->disp_manager->entry_obj_by_object_info(&mat, rob_itm_equip->field_D0); + rctx->disp_manager->entry_obj_by_object_info(mat, rob_itm_equip->field_D0); if (tex_pat_count) rctx->disp_manager->set_texture_pattern(); } @@ -14040,7 +14040,7 @@ void rob_chara_item_equip::disp(int32_t chara_id, render_context* rctx) { if (item_equip_range) for (int32_t i = first_item_equip_object; i < max_item_equip_object; i++) - item_equip_object[i].disp(&mat, rctx); + item_equip_object[i].disp(mat, rctx); else { for (int32_t i = ITEM_ATAMA; i < ITEM_MAX; i++) { mdl::ObjFlags chara_flags = (mdl::ObjFlags)0; @@ -14059,7 +14059,7 @@ void rob_chara_item_equip::disp(int32_t chara_id, render_context* rctx) { enum_and(flags, ~mdl::OBJ_SHADOW); disp_manager.set_obj_flags((mdl::ObjFlags)(chara_flags | flags | mdl::OBJ_SSS)); - item_equip_object[i].disp(&mat, rctx); + item_equip_object[i].disp(mat, rctx); } } disp_manager.set_texture_color_coefficients(temp_texture_color_coeff); @@ -18075,7 +18075,7 @@ void rob_chara_age_age_object::disp(render_context* rctx, size_t chara_index, rctx->disp_manager->set_obj_flags(flags); rctx->disp_manager->set_chara_color(chara_color); rctx->disp_manager->set_shadow_type(chara_index ? SHADOW_STAGE : SHADOW_CHARA); - rctx->disp_manager->entry_obj_by_obj(&mat4_identity, &obj, + rctx->disp_manager->entry_obj_by_obj(mat4_identity, &obj, &get_obj_set_texture(), &obj_vert_buf, &obj_index_buf, 0, 1.0f); } diff --git a/src/CRE/rob/rob.hpp b/src/CRE/rob/rob.hpp index fb39c533..02177890 100644 --- a/src/CRE/rob/rob.hpp +++ b/src/CRE/rob/rob.hpp @@ -1479,7 +1479,7 @@ public: virtual void CtrlStep(int32_t stage, bool disable_external_force) = 0; virtual void CtrlMain() = 0; virtual void CtrlOsagePlayData() = 0; - virtual void Disp(const mat4* mat, render_context* rctx) = 0; + virtual void Disp(const mat4& mat, render_context* rctx) = 0; virtual void Reset(); virtual void Field_40() = 0; virtual void CtrlInitBegin() = 0; @@ -1502,7 +1502,7 @@ public: virtual void CtrlStep(int32_t stage, bool disable_external_force) override; virtual void CtrlMain() override; virtual void CtrlOsagePlayData() override; - virtual void Disp(const mat4* mat, render_context* rctx) override; + virtual void Disp(const mat4& mat, render_context* rctx) override; virtual void Field_40() override; virtual void CtrlInitBegin() override; virtual void CtrlInitMain() override; @@ -1963,7 +1963,7 @@ struct RobCloth : public CLOTH { void CtrlMain(const float_t step, bool ignore_friction); void CtrlOsagePlayData(std::vector& opd_blend_data); void CtrlStep(const float_t step); - void Disp(const mat4* mat, render_context* rctx); + void Disp(const mat4& mat, render_context* rctx); void GetRootData(); void InitData(size_t root_count, size_t nodes_count, obj_skin_block_cloth_root* root, obj_skin_block_cloth_node* nodes, mat4* mats, int32_t loop, @@ -2003,7 +2003,7 @@ public: virtual void CtrlStep(int32_t stage, bool disable_external_force) override; virtual void CtrlMain() override; virtual void CtrlOsagePlayData() override; - virtual void Disp(const mat4* mat, render_context* rctx) override; + virtual void Disp(const mat4& mat, render_context* rctx) override; virtual void Reset() override; virtual void Field_40() override; virtual void CtrlInitBegin() override; @@ -2133,7 +2133,7 @@ public: virtual void CtrlStep(int32_t stage, bool disable_external_force) override; virtual void CtrlMain() override; virtual void CtrlOsagePlayData() override; - virtual void Disp(const mat4* mat, render_context* rctx) override; + virtual void Disp(const mat4& mat, render_context* rctx) override; virtual void Reset() override; virtual void Field_40() override; virtual void CtrlInitBegin() override; @@ -2173,7 +2173,7 @@ public: virtual void CtrlStep(int32_t stage, bool disable_external_force) override; virtual void CtrlMain() override; virtual void CtrlOsagePlayData() override; - virtual void Disp(const mat4* mat, render_context* rctx) override; + virtual void Disp(const mat4& mat, render_context* rctx) override; virtual void Field_40() override; virtual void CtrlInitBegin() override; virtual void CtrlInitMain() override; @@ -2248,7 +2248,7 @@ public: virtual void CtrlStep(int32_t stage, bool disable_external_force) override; virtual void CtrlMain() override; virtual void CtrlOsagePlayData() override; - virtual void Disp(const mat4* mat, render_context* rctx) override; + virtual void Disp(const mat4& mat, render_context* rctx) override; virtual void Field_40() override; virtual void CtrlInitBegin() override; virtual void CtrlInitMain() override; @@ -2301,7 +2301,7 @@ struct rob_chara_item_equip_object { void add_motion_reset_data(uint32_t motion_id, float_t frame, int32_t iterations); void check_no_opd(std::vector& opd_blend_data); void clear_ex_data(); - void disp(const mat4* mat, render_context* rctx); + void disp(const mat4& mat, render_context* rctx); int32_t get_bone_index(const char* name, const bone_database* bone_data); bone_node* get_bone_node(int32_t bone_index); bone_node* get_bone_node(const char* name, const bone_database* bone_data); diff --git a/src/CRE/shader_ft.cpp b/src/CRE/shader_ft.cpp index 0551de04..761a0112 100644 --- a/src/CRE/shader_ft.cpp +++ b/src/CRE/shader_ft.cpp @@ -92,7 +92,6 @@ enum shader_ft_sub_enum { SHADER_FT_SUB_DOF_MAIN_FILTER, SHADER_FT_SUB_DOF_UPSAMPLE, SHADER_FT_SUB_TRANSPARENCY, - SHADER_FT_SUB_REFLECT_STENCIL, SHADER_FT_SUB_SHADER_END, }; @@ -704,14 +703,6 @@ static const int32_t transparency_fpt_unival_max[] = { -1, }; -static const int32_t reflect_stencil_vpt_unival_max[] = { - -1, -}; - -static const int32_t reflect_stencil_fpt_unival_max[] = { - -1, -}; - #pragma region Shader Description #define SHADER_DESCRIPTION_EFFECT_TEXTURE_SAMPLER \ { SHADER_DESCRIPTION_SAMPLER, 14, 0, U_INVALID, } @@ -2015,17 +2006,6 @@ static const shader_description transparency_fpt_desc[] = { { SHADER_DESCRIPTION_FRAGMENT_OUTPUT, 0, 4, U_INVALID, }, { SHADER_DESCRIPTION_END, -1, -1, U_INVALID, }, }; - -static const shader_description reflect_stencil_vpt_desc[] = { - SHADER_DESCRIPTION_COMMON_QUAD, - { SHADER_DESCRIPTION_END, -1, -1, U_INVALID, }, -}; - -static const shader_description reflect_stencil_fpt_desc[] = { - { SHADER_DESCRIPTION_SAMPLER, 0, 0, U_INVALID, }, - { SHADER_DESCRIPTION_FRAGMENT_OUTPUT, 0, 4, U_INVALID, }, - { SHADER_DESCRIPTION_END, -1, -1, U_INVALID, }, -}; #undef SHADER_DESCRIPTION_COMMON_QUAD #undef SHADER_DESCRIPTION_COMMON_SKINNING #undef SHADER_DESCRIPTION_COMMON_SCENE @@ -2274,10 +2254,6 @@ static const shader_sub_table TRANSPARENCY_table[] = { shader_sub_table_struct(TRANSPARENCY, transparency, transparency), }; -static const shader_sub_table REFLECT_STENCIL_table[] = { - shader_sub_table_struct(REFLECT_STENCIL, reflect_stencil, reflect_stencil), -}; - #undef shader_sub_table_struct static const uniform_name BLINN_uniform[] = { @@ -2498,10 +2474,6 @@ static const uniform_name TRANSPARENCY_uniform[] = { U_INVALID, }; -static const uniform_name REFLECT_STENCIL_uniform[] = { - U_INVALID, -}; - struct glass_eye_struct { const vec4 tex_model_param; const vec4 eb_tex_model_param; @@ -2592,7 +2564,6 @@ const shader_table shader_ft_table[] = { shader_table_struct(SPRITE), shader_table_struct(DOF), shader_table_struct(TRANSPARENCY), - shader_table_struct(REFLECT_STENCIL), }; #undef shader_table_struct diff --git a/src/CRE/shader_ft.hpp b/src/CRE/shader_ft.hpp index 4270d264..fd6881a9 100644 --- a/src/CRE/shader_ft.hpp +++ b/src/CRE/shader_ft.hpp @@ -58,7 +58,6 @@ enum shader_ft_enum { SHADER_FT_SPRITE, SHADER_FT_DOF, SHADER_FT_TRANSPARENCY, - SHADER_FT_REFLECT_STENCIL, SHADER_FT_END, SHADER_FT_MAX, }; diff --git a/src/CRE/stage.cpp b/src/CRE/stage.cpp index 7494b78c..1d3363e4 100644 --- a/src/CRE/stage.cpp +++ b/src/CRE/stage.cpp @@ -40,7 +40,7 @@ static bool object_bounding_sphere_check_visibility_shadow_stage( static bool stage_ctrl(stage* s); static void stage_disp(stage* s); static void stage_disp_shadow(stage* s); -static void stage_disp_shadow_object(object_info object, mat4* mat); +static void stage_disp_shadow_object(object_info object, const mat4& mat); static void stage_free(stage* s); static void stage_load(stage* s); static void stage_reset(stage* s); @@ -489,27 +489,27 @@ static void stage_disp(stage* s) { mat4_rotate_y(s->rot_y, &mat); if (s->stage_data->object_ground.not_null() && s->ground) - disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_ground); + disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_ground); if (s->stage_data->object_ring.not_null() && s->ring) - disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_ring); + disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_ring); if (s->stage_data->object_reflect.not_null()) { disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_REFLECT)); - disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_reflect); + disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_reflect); disp_manager.set_obj_flags(); } if (s->stage_data->object_refract.not_null()) { disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_REFRACT)); - disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_refract); + disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_refract); disp_manager.set_obj_flags(); } if (s->stage_data->object_sky.not_null() && s->sky) { mat4 t = s->mat; mat4_mul(&t, &mat, &t); - disp_manager.entry_obj_by_object_info(&t, s->stage_data->object_sky); + disp_manager.entry_obj_by_object_info(t, s->stage_data->object_sky); } if (s->stage_data->lens_flare_texture != -1 && s->lens_flare) { @@ -535,15 +535,15 @@ static void stage_disp_shadow(stage* s) { mat4 mat; mat4_rotate_y(s->rot_y, &mat); if (s->stage_data->object_shadow.not_null()) - stage_disp_shadow_object(s->stage_data->object_shadow, &mat); + stage_disp_shadow_object(s->stage_data->object_shadow, mat); } -static void stage_disp_shadow_object(object_info object, mat4* mat) { +static void stage_disp_shadow_object(object_info object, const mat4& mat) { mdl::DispManager& disp_manager = *rctx_ptr->disp_manager; for (int32_t i = SHADOW_CHARA; i < SHADOW_MAX; i++) { disp_manager.set_shadow_type((shadow_type_enum)i); - disp_manager.set_culling_finc(i == SHADOW_CHARA + disp_manager.set_culling_func(i == SHADOW_CHARA ? object_bounding_sphere_check_visibility_shadow_chara : object_bounding_sphere_check_visibility_shadow_stage); disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_SHADOW_OBJECT)); @@ -551,7 +551,7 @@ static void stage_disp_shadow_object(object_info object, mat4* mat) { } disp_manager.set_obj_flags(); - disp_manager.set_culling_finc(); + disp_manager.set_culling_func(); disp_manager.set_shadow_type(); } diff --git a/src/CRE/stage_modern.cpp b/src/CRE/stage_modern.cpp index 9a1c1588..62c6cbd8 100644 --- a/src/CRE/stage_modern.cpp +++ b/src/CRE/stage_modern.cpp @@ -42,7 +42,7 @@ static bool object_bounding_sphere_check_visibility_shadow_stage( static bool stage_modern_ctrl(stage_modern* s, void* data, object_database* obj_db, texture_database* tex_db); static void stage_modern_disp(stage_modern* s); static void stage_modern_disp_shadow(stage_modern* s); -static void stage_modern_disp_shadow_object(object_info object, mat4* mat); +static void stage_modern_disp_shadow_object(object_info object, const mat4& mat); static void stage_modern_free(stage_modern* s); static void stage_modern_load(stage_modern* s, void* data, object_database* obj_db, texture_database* tex_db); static void stage_modern_reset(stage_modern* s); @@ -504,24 +504,24 @@ static void stage_modern_disp(stage_modern* s) { mat4_rotate_y(s->rot_y, &mat); if (s->stage_data->object_ground.not_null_modern() && s->ground) - disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_ground); + disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_ground); if (s->stage_data->object_reflect.not_null_modern()) { disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_REFRACT)); - disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_reflect); + disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_reflect); disp_manager.set_obj_flags(); } if (s->stage_data->object_refract.not_null_modern()) { disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_REFRACT)); - disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_refract); + disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_refract); disp_manager.set_obj_flags(); } if (s->stage_data->object_sky.not_null_modern() && s->sky) { mat4 t = s->mat; mat4_mul(&t, &mat, &t); - disp_manager.entry_obj_by_object_info(&t, s->stage_data->object_sky); + disp_manager.entry_obj_by_object_info(t, s->stage_data->object_sky); } } @@ -532,15 +532,15 @@ static void stage_modern_disp_shadow(stage_modern* s) { mat4 mat; mat4_rotate_y(s->rot_y, &mat); if (s->stage_data->object_shadow.not_null_modern()) - stage_modern_disp_shadow_object(s->stage_data->object_shadow, &mat); + stage_modern_disp_shadow_object(s->stage_data->object_shadow, mat); } -static void stage_modern_disp_shadow_object(object_info object, mat4* mat) { +static void stage_modern_disp_shadow_object(object_info object, const mat4& mat) { mdl::DispManager& disp_manager = *rctx_ptr->disp_manager; for (int32_t i = SHADOW_CHARA; i < SHADOW_MAX; i++) { disp_manager.set_shadow_type((shadow_type_enum)i); - disp_manager.set_culling_finc(i == SHADOW_CHARA + disp_manager.set_culling_func(i == SHADOW_CHARA ? object_bounding_sphere_check_visibility_shadow_chara : object_bounding_sphere_check_visibility_shadow_stage); disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_SHADOW_OBJECT)); @@ -548,7 +548,7 @@ static void stage_modern_disp_shadow_object(object_info object, mat4* mat) { } disp_manager.set_obj_flags(); - disp_manager.set_culling_finc(); + disp_manager.set_culling_func(); disp_manager.set_shadow_type(); } diff --git a/src/ReDIVA/data_edit/glitter_editor.cpp b/src/ReDIVA/data_edit/glitter_editor.cpp index e14724e4..45d13f26 100644 --- a/src/ReDIVA/data_edit/glitter_editor.cpp +++ b/src/ReDIVA/data_edit/glitter_editor.cpp @@ -1094,7 +1094,7 @@ void GlitterEditor::disp() { etc.data.grid.h = 50; etc.data.grid.ws = 50; etc.data.grid.hs = 50; - rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc); } } @@ -1947,7 +1947,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_f2( etc.constant = true; etc.data.cube.size = vec3::max(emit_inst->data.box.size * scale, 0.1f); etc.data.cube.wire = false; - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local); } break; case Glitter::EMITTER_CYLINDER: { mdl::EtcObj etc(mdl::ETC_OBJ_CYLINDER); @@ -1958,7 +1958,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_f2( etc.data.cylinder.slices = 16; etc.data.cylinder.stacks = 1; etc.data.cylinder.wire = false; - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local); } break; case Glitter::EMITTER_SPHERE: { mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE); @@ -1968,7 +1968,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_f2( etc.data.sphere.slices = 16; etc.data.sphere.stacks = 16; etc.data.sphere.wire = false; - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local); } break; case Glitter::EMITTER_POLYGON: { mdl::EtcObj etc(mdl::ETC_OBJ_LINE); @@ -1976,7 +1976,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_f2( etc.constant = true; etc.data.line.pos[0] = vec3(-emit_inst->data.polygon.size * scale.x * 0.5f, 0.0f, 0.0f); etc.data.line.pos[1] = vec3(emit_inst->data.polygon.size * scale.x * 0.5f, 0.0f, 0.0f); - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local); } break; } } @@ -2013,7 +2013,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_x( etc.constant = true; etc.data.cube.size = vec3::max(emit_inst->data.box.size * scale, 0.1f); etc.data.cube.wire = false; - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local); } break; case Glitter::EMITTER_CYLINDER: { mdl::EtcObj etc(mdl::ETC_OBJ_CYLINDER); @@ -2024,7 +2024,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_x( etc.data.cylinder.slices = 16; etc.data.cylinder.stacks = 1; etc.data.cylinder.wire = false; - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local); } break; case Glitter::EMITTER_SPHERE: { mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE); @@ -2034,7 +2034,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_x( etc.data.sphere.slices = 16; etc.data.sphere.stacks = 16; etc.data.sphere.wire = false; - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local); } break; case Glitter::EMITTER_POLYGON: { mdl::EtcObj etc(mdl::ETC_OBJ_CYLINDER); @@ -2045,7 +2045,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_x( etc.data.cylinder.slices = 16; etc.data.cylinder.stacks = 0; etc.data.cylinder.wire = false; - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local); } break; } } diff --git a/src/ReDIVA/data_test/auth_3d_test.cpp b/src/ReDIVA/data_test/auth_3d_test.cpp index 98797789..6b98a974 100644 --- a/src/ReDIVA/data_test/auth_3d_test.cpp +++ b/src/ReDIVA/data_test/auth_3d_test.cpp @@ -500,7 +500,7 @@ void Auth3dTestTask::disp() { etc.color = 0xFFFFFFFF; etc.data.plane.w = 20; etc.data.plane.h = 20; - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc); } } diff --git a/src/ReDIVA/data_test/glitter_test.cpp b/src/ReDIVA/data_test/glitter_test.cpp index 07321f29..009ebb91 100644 --- a/src/ReDIVA/data_test/glitter_test.cpp +++ b/src/ReDIVA/data_test/glitter_test.cpp @@ -170,7 +170,7 @@ void TaskDataTestGlitterParticle::disp() { etc.data.grid.h = 50; etc.data.grid.ws = 50; etc.data.grid.hs = 50; - rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc); } int32_t life_time = 0; diff --git a/src/ReDIVA/data_test/object_test.cpp b/src/ReDIVA/data_test/object_test.cpp index f8d135e0..8c0abe82 100644 --- a/src/ReDIVA/data_test/object_test.cpp +++ b/src/ReDIVA/data_test/object_test.cpp @@ -206,7 +206,7 @@ void TaskDataTestObj::disp() { etc.data.grid.h = 40; etc.data.grid.ws = 40; etc.data.grid.hs = 40; - rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc); } TaskDataTestObj::Data* TaskDataTestObj::get_data() { @@ -314,7 +314,7 @@ void DataTestObjectManager::disp() { shadow_ptr_get()->field_1D0[SHADOW_CHARA].push_back(pos); rctx_ptr->disp_manager->set_shadow_type(SHADOW_CHARA); - rctx_ptr->disp_manager->entry_obj_by_object_info(&mat, { obj_id, obj_set_id }); + rctx_ptr->disp_manager->entry_obj_by_object_info(mat, { obj_id, obj_set_id }); rctx_ptr->disp_manager->set_obj_flags((mdl::ObjFlags)0); } diff --git a/src/ReDIVA/data_test/rob_osage_test.cpp b/src/ReDIVA/data_test/rob_osage_test.cpp index 31eeefa9..26ddd004 100644 --- a/src/ReDIVA/data_test/rob_osage_test.cpp +++ b/src/ReDIVA/data_test/rob_osage_test.cpp @@ -978,7 +978,7 @@ void RobOsageTest::disp_coli() { etc.data.capsule.wire = false; etc.data.capsule.pos[0] = j[-1].pos; etc.data.capsule.pos[1] = j[ 0].pos; - rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc); } } else if (cls && cls->rob.nodes.size() >= cls->rob.root_count) { @@ -1000,7 +1000,7 @@ void RobOsageTest::disp_coli() { mat4 mat; mat4_translate(&pos, &mat); - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc); } } } @@ -1044,7 +1044,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision mat4 mat; mat4_translate(&pos, &mat); - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc); } break; case SkinParam::CollisionTypeCapsule: { mdl::EtcObj etc(mdl::ETC_OBJ_CAPSULE); @@ -1058,7 +1058,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision mat4_transform_point(&transform[i.node_idx[0]], &i.pos[0], &etc.data.capsule.pos[0]); mat4_transform_point(&transform[i.node_idx[1]], &i.pos[1], &etc.data.capsule.pos[1]); - rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc); } break; case SkinParam::CollisionTypePlane: { mdl::EtcObj etc(mdl::ETC_OBJ_PLANE); @@ -1075,7 +1075,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision const vec3 up = { 0.0f, 1.0f, 0.0f }; vec3 axis; float_t angle; - Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir); + Glitter::axis_angle_from_vectors(axis, angle, up, dir); mat4 mat_rot = mat4_identity; mat4_mul_rotation(&mat_rot, &axis, angle, &mat_rot); @@ -1084,7 +1084,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision mat4_translate(&pos, &mat); mat4_mul(&mat_rot, &mat, &mat); mat4_scale_rot(&mat, i.radius, &mat); - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc); } break; case SkinParam::CollisionTypeEllipse: { mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE); @@ -1108,7 +1108,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision const vec3 up = { 0.0f, 1.0f, 0.0f }; vec3 axis; float_t angle; - Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir); + Glitter::axis_angle_from_vectors(axis, angle, up, dir); mat4 m = mat4_identity; mat4_mul_rotation(&m, &axis, angle, &m); @@ -1118,7 +1118,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision const float_t scale_y = sqrtf(i.radius * i.radius + length * length); mat4_scale_rot(&mat, i.radius, scale_y, i.radius, &mat); - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc); } break; case SkinParam::CollisionTypeAABB: { mdl::EtcObj etc(mdl::ETC_OBJ_CUBE); @@ -1133,7 +1133,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision mat4 mat; mat4_translate(&pos, &mat); - rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc); + rctx_ptr->disp_manager->entry_obj_etc(mat, etc); } break; } } diff --git a/src/ReDIVA/x_pv_game.cpp b/src/ReDIVA/x_pv_game.cpp index a6720e8f..e85a96aa 100644 --- a/src/ReDIVA/x_pv_game.cpp +++ b/src/ReDIVA/x_pv_game.cpp @@ -9091,18 +9091,25 @@ XPVGameBaker::AFTData::~AFTData() { } void XPVGameBaker::AFTData::Read() { - aet_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\2d\\mdata_aet_db", false); - auth_3d_db_base.read("diva\\AFT\\rom\\auth_3d\\auth_3d_db"); - auth_3d_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\auth_3d\\mdata_auth_3d_db"); - obj_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\objset\\mdata_obj_db", false); - spr_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\2d\\mdata_spr_db", false); - stage_data.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\mdata_stage_data", false); + data_struct* aft_data = &data_list[DATA_AFT]; + + aet_db.modern = false; + aft_data->load_file(&aet_db, "rom/2d/", "mdata_aet_db.bin", aet_database_file::load_file); + aft_data->load_file(&auth_3d_db_base, "rom/auth_3d/", "auth_3d_db.bin", auth_3d_database_file::load_file); + aft_data->load_file(&auth_3d_db, "rom/auth_3d/", "mdata_auth_3d_db.bin", auth_3d_database_file::load_file); + obj_db.modern = false; + aft_data->load_file(&obj_db, "rom/objset/", "mdata_obj_db.bin", object_database_file::load_file); + spr_db.modern = false; + aft_data->load_file(&spr_db, "rom/2d/", "mdata_spr_db.bin", sprite_database_file::load_file); + aft_data->load_file(&stage_data, "rom/", "mdata_stage_data.bin", stage_database_file::load_file); { texture_database_file tex_db_base; - tex_db_base.read("diva\\AFT\\rom\\objset\\tex_db", false); + tex_db_base.modern = false; + aft_data->load_file(&tex_db_base, "rom/objset/", "tex_db.bin", texture_database_file::load_file); this->tex_db_base.add(&tex_db_base); } - tex_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\objset\\mdata_tex_db", false); + tex_db.modern = false; + aft_data->load_file(&tex_db, "rom/objset/", "mdata_tex_db.bin", texture_database_file::load_file); } void XPVGameBaker::AFTData::Write(const char* out_dir, @@ -9144,7 +9151,8 @@ void XPVGameBaker::AFTData::Write(const char* out_dir, } XPVGameBaker::MMPData::MMPData() { - + mmp_base_path.assign("R:\\SteamLibrary\\steamapps\\common\\" + "Hatsune Miku Project DIVA Mega Mix Plus\\"); } XPVGameBaker::MMPData::~MMPData() { @@ -9152,8 +9160,8 @@ XPVGameBaker::MMPData::~MMPData() { } void XPVGameBaker::MMPData::Read() { - const std::string mmp_base_path("R:\\SteamLibrary\\steamapps\\common\\" - "Hatsune Miku Project DIVA Mega Mix Plus\\"); + if (mmp_base_path.back() != '\\') + mmp_base_path.push_back('\\'); const std::pair mmp_paths[] = { { "diva_main\\rom_steam\\", "" }, @@ -10032,8 +10040,6 @@ bool XPVGameBaker::init() { x_pack_mmp_bake_log_file_ptr = new file_stream; x_pack_mmp_bake_log_file_ptr->open("x_pack_mmp_bake_log.txt", "wb"); - aft.Read(); - mmp.Read(); return true; } @@ -10086,9 +10092,9 @@ void XPVGameBaker::window() { extern int32_t height; extern int32_t width; - float_t w = 240.0f; + float_t w = 360.0f; float_t h = (float_t)height; - h = min_def(h, 196.0f); + h = min_def(h, 228.0f); ImGui::SetNextWindowPos({ (float_t)width - w, 0.0f }, ImGuiCond_Always); ImGui::SetNextWindowSize({ w, h }, ImGuiCond_Always); @@ -10120,12 +10126,22 @@ void XPVGameBaker::window() { ImGui::CheckboxFlags("CRC", &obj_set_encode_flags, OBJ_SET_REFLECT_ENCODE_CRC); ImGui::EndGroup(); + ImGui::Separator(); + ImGui::SetColumnSpace(1.0f / 5.0f); + char buf[0x400]; + strncpy_s(buf, sizeof(buf), mmp.mmp_base_path.c_str(), mmp.mmp_base_path.size()); + if (ImGui::ColumnInputText("MMp Path:", buf, sizeof(buf), 0, 0, 0)) + mmp.mmp_base_path.assign(buf); + ImGui::SetDefaultColumnSpace(); ImGui::Separator(); if (ImGui::Button("Start")) { wait = false; index = 0; start = true; + + aft.Read(); + mmp.Read(); } ImGui::End(); @@ -12660,7 +12676,7 @@ static void x_pv_game_write_auth_3d_reflect(stream& s, auth_3d_database_file* au auth_3d_struct& auth_3d_reflect = auth_3d.data()[&i - ptr->data()]; for (auth_3d_database_uid_file& j : auth_3d_db->uid) { - if (j.value.size() > 2 && hash_string_xxh3_64bits(j.value.substr(2)) != name_hash) + if (j.value.size() <= 2 || hash_string_xxh3_64bits(j.value.substr(2)) != name_hash) continue; auth_3d_reflect.uid = j.org_uid; diff --git a/src/ReDIVA/x_pv_game.hpp b/src/ReDIVA/x_pv_game.hpp index 594fbbc9..97a7cd9a 100644 --- a/src/ReDIVA/x_pv_game.hpp +++ b/src/ReDIVA/x_pv_game.hpp @@ -934,6 +934,7 @@ public: texture_database tex_db_base; texture_database_file tex_db; prj::vector_pair tex_ids; + std::string mmp_base_path;; MMPData(); ~MMPData();