From 8158c35f62d20024fbcb9b8b79bbd3c99ecfe71a Mon Sep 17 00:00:00 2001 From: korenkonder Date: Fri, 22 Nov 2024 01:33:27 +0300 Subject: [PATCH] Some small changes --- src/CRE/light_param/light.cpp | 6 +- src/CRE/mdl/disp_manager.cpp | 193 ++++++++++++++++++---------------- src/CRE/mdl/disp_manager.hpp | 2 +- src/CRE/mdl/draw_object.cpp | 9 +- src/CRE/object.cpp | 6 +- src/CRE/render.cpp | 6 +- src/CRE/render_manager.cpp | 20 +--- src/CRE/shared.hpp | 8 ++ src/CRE/static_var.hpp | 8 -- 9 files changed, 130 insertions(+), 128 deletions(-) diff --git a/src/CRE/light_param/light.cpp b/src/CRE/light_param/light.cpp index addbde85..a79ce537 100644 --- a/src/CRE/light_param/light.cpp +++ b/src/CRE/light_param/light.cpp @@ -444,10 +444,10 @@ void light_set::data_set(face& face, light_set_id id) { static void light_get_direction_from_position(vec4* pos_dir, light_data* light, bool force) { if (force || light->get_type() == LIGHT_PARALLEL) { float_t length = vec3::length(*(vec3*)pos_dir); - if (length <= 0.000001) - *(vec3*)pos_dir = vec3(0.0f, 1.0f, 0.0f); - else + if (length > 0.000001f) *(vec3*)pos_dir *= 1.0f / length; + else + *(vec3*)pos_dir = { 0.0f, 1.0f, 0.0f }; pos_dir->w = 0.0f; } } diff --git a/src/CRE/mdl/disp_manager.cpp b/src/CRE/mdl/disp_manager.cpp index 1272d58e..58a02234 100644 --- a/src/CRE/mdl/disp_manager.cpp +++ b/src/CRE/mdl/disp_manager.cpp @@ -259,7 +259,12 @@ namespace mdl { args->emission = emission; args->chara_color = disp_manager->chara_color; - args->self_shadow = !!(disp_manager->obj_flags & (mdl::OBJ_8 | mdl::OBJ_4)); + if (disp_manager->obj_flags & OBJ_4) + args->self_shadow = 1; + else if (disp_manager->obj_flags & mdl::OBJ_8) + args->self_shadow = 2; + else + args->self_shadow = 0; args->shadow = disp_manager->shadow_type; args->texture_color_coefficients = disp_manager->texture_color_coefficients; args->texture_color_coefficients.w = disp_manager->wet_param; @@ -2267,7 +2272,7 @@ namespace mdl { } static int32_t obj_axis_aligned_bounding_box_check_visibility( - 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)); @@ -2346,29 +2351,29 @@ namespace mdl { return 2; } - bool DispManager::entry_obj(const ::obj* object, obj_mesh_vertex_buffer* obj_vertex_buf, + 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) { printf_debug("mdl::DispManager::entry_obj: no vertex or index object buffer to draw;\n"); - printf_debug(" Object: %s\n", object->name); + printf_debug(" Object: %s\n", obj->name); return false; } ::camera* cam = rctx_ptr->camera; - if (!local && object_culling && !instances_count && !bone_mat && (!object + if (!local && object_culling && !instances_count && !bone_mat && (!obj || !obj_bounding_sphere_check_visibility( - &object->bounding_sphere, &culling, cam, mat))) { + &obj->bounding_sphere, &culling, cam, mat))) { culling.culled.objects++; return false; } culling.passed.objects++; - for (int32_t i = 0; i < object->num_mesh; i++) { - obj_mesh* mesh = &object->mesh_array[i]; + 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()) @@ -2421,7 +2426,7 @@ namespace mdl { continue; } - v32 = obj_bounding_sphere_check_visibility( + int32_t v32 = obj_bounding_sphere_check_visibility( &sub_mesh_morph->bounding_sphere, &culling, cam, mat); if (v32 == 2) { if (culling.func) @@ -2441,7 +2446,7 @@ namespace mdl { culling.passed.submesh_array++; int32_t num_bone_index = sub_mesh->num_bone_index; - uint16_t* bone_index = sub_mesh->bone_index_array; + const uint16_t* bone_index = sub_mesh->bone_index_array; mat4* mats; if (num_bone_index && enable_bone_mat) { @@ -2458,7 +2463,7 @@ namespace mdl { num_bone_index = 0; } - obj_material_data* material = &object->material_array[sub_mesh->material_index]; + obj_material_data* material = &obj->material_array[sub_mesh->material_index]; ObjData* data = alloc_obj_data(OBJ_KIND_NORMAL); if (!data) continue; @@ -2483,13 +2488,13 @@ namespace mdl { if (!vertex_buffer || !index_buffer || obj_morph_vertex_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", object->name, mesh->name, j); + printf_debug(" Object: %s; Mesh: %s; Sub Mesh: %d\n", obj->name, mesh->name, j); continue; } - uint32_t material_hash = hash_utf8_murmurhash(material->material.name); + const uint32_t material_hash = hash_utf8_murmurhash(material->material.name); - material_list_struct* mat_list = 0; + const material_list_struct* mat_list = 0; for (int32_t k = 0; k < material_list_count; k++) if (material_list_array[k].hash == material_hash) { mat_list = &material_list_array[k]; @@ -2558,7 +2563,7 @@ namespace mdl { _emission = material->material.color.emission; } - data->init_sub_mesh(this, mat, object->bounding_sphere.radius, sub_mesh, mesh, material, textures, + data->init_sub_mesh(this, mat, obj->bounding_sphere.radius, sub_mesh, mesh, material, textures, num_bone_index, mats, vertex_buffer, vertex_buffer_offset, index_buffer, _blend_color, _emission, morph_vertex_buffer, morph_vertex_buffer_offset, instances_count, instances_mat, func, func_data); @@ -2570,13 +2575,26 @@ namespace mdl { continue; } - obj_material_attrib_member attrib = material->material.attrib.m; + const obj_material_attrib_member attrib = material->material.attrib.m; if (obj_flags & (mdl::OBJ_ALPHA_ORDER_1 | mdl::OBJ_ALPHA_ORDER_2 | mdl::OBJ_ALPHA_ORDER_3) && data->args.sub_mesh.blend_color.w < 1.0f) { if (!(obj_flags & mdl::OBJ_NO_TRANSLUCENCY)) { - if (attrib.flag_28 || (attrib.punch_through - || !(attrib.alpha_texture | attrib.alpha_material)) - && !sub_mesh->attrib.m.transparent) { + bool translucent = false; + if (!attrib.flag_28 && (!attrib.punch_through + && (attrib.alpha_texture || attrib.alpha_material) + || sub_mesh->attrib.m.transparent)) + translucent = true; + + if (translucent) { + 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) + entry_list(local ? OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2_LOCAL + : OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2, data); + else + entry_list(OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_3, data); + } + else { if (!attrib.punch_through) { if (obj_flags & mdl::OBJ_ALPHA_ORDER_1) entry_list(OBJ_TYPE_OPAQUE_ALPHA_ORDER_1, data); @@ -2599,63 +2617,12 @@ namespace mdl { if (obj_flags & mdl::OBJ_SSS) entry_list(OBJ_TYPE_SSS, data); } - - 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) - entry_list(local ? OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2_LOCAL - : OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2, data); - else - entry_list(OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_3, data); } } - else { - if (attrib.flag_28 || data->args.sub_mesh.blend_color.w >= 1.0f - && (attrib.punch_through || !(attrib.alpha_texture | attrib.alpha_material)) - && !sub_mesh->attrib.m.transparent) { - if (obj_flags & mdl::OBJ_SHADOW) - entry_list((ObjType)(OBJ_TYPE_SHADOW_CHARA + shadow_type), data); - - if (obj_flags & mdl::OBJ_SSS) - entry_list(OBJ_TYPE_SSS, data); - - if (attrib.punch_through) { - if (!(obj_flags & mdl::OBJ_NO_TRANSLUCENCY)) - entry_list(local ? OBJ_TYPE_TRANSPARENT_LOCAL - : OBJ_TYPE_TRANSPARENT, data); - - if (obj_flags & mdl::OBJ_CHARA_REFLECT) - entry_list(OBJ_TYPE_REFLECT_CHARA_OPAQUE, data); - - if (obj_flags & mdl::OBJ_REFLECT) - entry_list(OBJ_TYPE_REFLECT_OPAQUE, data); - - if (obj_flags & mdl::OBJ_REFRACT) - entry_list(OBJ_TYPE_REFRACT_TRANSPARENT, data); - } - else { - if (!(obj_flags & mdl::OBJ_NO_TRANSLUCENCY)) - entry_list(local ? OBJ_TYPE_OPAQUE_LOCAL - : OBJ_TYPE_OPAQUE, data); - - if (obj_flags & mdl::OBJ_20) - entry_list(OBJ_TYPE_TYPE_6, data); - - if (obj_flags & mdl::OBJ_CHARA_REFLECT) - entry_list(OBJ_TYPE_REFLECT_CHARA_OPAQUE, data); - - if (obj_flags & mdl::OBJ_REFLECT) - entry_list(OBJ_TYPE_REFLECT_OPAQUE, data); - - if (obj_flags & mdl::OBJ_REFRACT) - entry_list(OBJ_TYPE_REFRACT_OPAQUE, data); - } - - if (obj_flags & mdl::OBJ_USER) - entry_list(OBJ_TYPE_USER, data); - continue; - } - else if (!(obj_flags & mdl::OBJ_NO_TRANSLUCENCY)) { + else if (!attrib.flag_28 && (data->args.sub_mesh.blend_color.w < 1.0f + || !attrib.punch_through && attrib.alpha_texture | attrib.alpha_material + || sub_mesh->attrib.m.transparent)) { + if (!(obj_flags & mdl::OBJ_NO_TRANSLUCENCY)) { if (!attrib.translucent_priority) if (local) entry_list(OBJ_TYPE_TRANSLUCENT_LOCAL, data); @@ -2669,6 +2636,49 @@ namespace mdl { translucent_priority[translucent_priority_count++] = &data->args.sub_mesh; } } + else { + if (obj_flags & mdl::OBJ_SHADOW) + entry_list((ObjType)(OBJ_TYPE_SHADOW_CHARA + shadow_type), data); + + if (obj_flags & mdl::OBJ_SSS) + entry_list(OBJ_TYPE_SSS, data); + + if (attrib.punch_through) { + if (!(obj_flags & mdl::OBJ_NO_TRANSLUCENCY)) + entry_list(local ? OBJ_TYPE_TRANSPARENT_LOCAL + : OBJ_TYPE_TRANSPARENT, data); + + if (obj_flags & mdl::OBJ_CHARA_REFLECT) + entry_list(OBJ_TYPE_REFLECT_CHARA_OPAQUE, data); + + if (obj_flags & mdl::OBJ_REFLECT) + entry_list(OBJ_TYPE_REFLECT_OPAQUE, data); + + if (obj_flags & mdl::OBJ_REFRACT) + entry_list(OBJ_TYPE_REFRACT_TRANSPARENT, data); + } + else { + if (!(obj_flags & mdl::OBJ_NO_TRANSLUCENCY)) + entry_list(local ? OBJ_TYPE_OPAQUE_LOCAL + : OBJ_TYPE_OPAQUE, data); + + if (obj_flags & mdl::OBJ_20) + entry_list(OBJ_TYPE_TYPE_6, data); + + if (obj_flags & mdl::OBJ_CHARA_REFLECT) + entry_list(OBJ_TYPE_REFLECT_CHARA_OPAQUE, data); + + if (obj_flags & mdl::OBJ_REFLECT) + entry_list(OBJ_TYPE_REFLECT_OPAQUE, data); + + if (obj_flags & mdl::OBJ_REFRACT) + entry_list(OBJ_TYPE_REFRACT_OPAQUE, data); + } + + if (obj_flags & mdl::OBJ_USER) + entry_list(OBJ_TYPE_USER, data); + continue; + } if (obj_flags & mdl::OBJ_SHADOW) entry_list((ObjType)(OBJ_TYPE_SHADOW_CHARA @@ -2689,7 +2699,7 @@ namespace mdl { entry_list(OBJ_TYPE_USER, data); } - if (!translucent_priority_count) + if (translucent_priority_count <= 0) continue; ObjTranslucentArgs translucent_args; @@ -2705,20 +2715,19 @@ namespace mdl { } ObjData* data = alloc_obj_data(OBJ_KIND_TRANSLUCENT); - if (!data) - continue; - - 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) - entry_list(local ? OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2_LOCAL - : OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2, data); - else if (obj_flags & mdl::OBJ_ALPHA_ORDER_3) - entry_list(OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_3, data); - else - entry_list(local ? OBJ_TYPE_TRANSLUCENT_LOCAL - : OBJ_TYPE_TRANSLUCENT, data); + if (data) { + 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) + entry_list(local ? OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2_LOCAL + : OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2, data); + else if (obj_flags & mdl::OBJ_ALPHA_ORDER_3) + entry_list(OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_3, data); + else + entry_list(local ? OBJ_TYPE_TRANSLUCENT_LOCAL + : OBJ_TYPE_TRANSLUCENT, data); + } } return true; } @@ -2751,8 +2760,8 @@ namespace mdl { if (obj_info.id == -1 && obj_info.set_id == -1) return false; - ::obj* object = objset_info_storage_get_obj(obj_info); - if (!object) + ::obj* obj = objset_info_storage_get_obj(obj_info); + if (!obj) return false; std::vector* textures = objset_info_storage_get_obj_set_gentex(obj_info.set_id); @@ -2766,7 +2775,7 @@ namespace mdl { obj_morph_vertex_buffer = objset_info_storage_get_obj_mesh_vertex_buffer(morph.object); } - return entry_obj(object, obj_vertex_buffer, obj_index_buffer, + return entry_obj(obj, obj_vertex_buffer, obj_index_buffer, mat, textures, blend_color, bone_mat, obj_morph, obj_morph_vertex_buffer, instances_count, instances_mat, func, func_data, enable_bone_mat, local); } diff --git a/src/CRE/mdl/disp_manager.hpp b/src/CRE/mdl/disp_manager.hpp index 6d595184..c71207cc 100644 --- a/src/CRE/mdl/disp_manager.hpp +++ b/src/CRE/mdl/disp_manager.hpp @@ -178,7 +178,7 @@ namespace mdl { bool chara_color; vec4 blend_color; vec4 emission; - bool self_shadow; + int32_t self_shadow; shadow_type_enum shadow; GLuint morph_vertex_buffer; size_t morph_vertex_buffer_offset; diff --git a/src/CRE/mdl/draw_object.cpp b/src/CRE/mdl/draw_object.cpp index b5f29a67..85b18c29 100644 --- a/src/CRE/mdl/draw_object.cpp +++ b/src/CRE/mdl/draw_object.cpp @@ -638,10 +638,13 @@ static void draw_object_material_set_default(render_context* rctx, const mdl::Ob draw_object_material_set_uniform(material, false); if (!rctx->draw_state->shadow) uniform_value[U_STAGE_SHADOW] = 0; - else if (args->self_shadow) - uniform_value[U_STAGE_SHADOW] = 1; - else + else if (!args->self_shadow) uniform_value[U_STAGE_SHADOW] = args->sub_mesh->attrib.m.recieve_shadow ? 1 : 0; + else if (args->self_shadow != 1) + uniform_value[U_STAGE_SHADOW] = 0; + else + uniform_value[U_STAGE_SHADOW] = 1; + uniform_value[U_CHARA_SHADOW2] = args->shadow > SHADOW_CHARA ? 1 : 0; uniform_value[U_CHARA_SHADOW] = rctx->draw_state->self_shadow ? 1 : 0; diff --git a/src/CRE/object.cpp b/src/CRE/object.cpp index e5cd8785..d1fac883 100644 --- a/src/CRE/object.cpp +++ b/src/CRE/object.cpp @@ -738,7 +738,7 @@ void object_material_msgpack_read(const char* path, const char* set_name, for (int32_t i = 0; i < obj_set->obj_num; i++) { obj* obj = obj_set->obj_data[i]; - if (name_hash != hash_string_murmurhash(obj->name)) + if (name_hash != hash_utf8_murmurhash(obj->name)) continue; msgpack* materials = object.read_array("material"); @@ -753,7 +753,7 @@ void object_material_msgpack_read(const char* path, const char* set_name, for (size_t k = 0; k < obj->num_material; k++) { obj_material& mat = obj->material_array[k].material; - if (name_hash != hash_string_murmurhash(mat.name)) + if (name_hash != hash_utf8_murmurhash(mat.name)) continue; msgpack* shader_compo = material.read("shader_compo"); @@ -1020,7 +1020,7 @@ void object_material_msgpack_read(const char* path, const char* set_name, for (size_t k = 0; k < obj->num_mesh; k++) { obj_mesh& mesh = obj->mesh_array[k]; - if (name_hash != hash_string_murmurhash(mesh.name)) + if (name_hash != hash_utf8_murmurhash(mesh.name)) continue; msgpack* color_mult = _mesh.read("color_mult"); diff --git a/src/CRE/render.cpp b/src/CRE/render.cpp index 7bb0ed09..b4d2fb7f 100644 --- a/src/CRE/render.cpp +++ b/src/CRE/render.cpp @@ -185,6 +185,7 @@ namespace rndr { if (taa_blend < 0.0f || taa_blend >= 1.0f) taa_texture = taa_texture_selector; else { + gl_state_begin_event("taa_or_blur"); bool blur; GLuint sampler; if (taa_blend > 0.99f) { @@ -234,6 +235,7 @@ namespace rndr { draw_quad(render_post_width[0], render_post_height[0], render_post_width_scale, render_post_height_scale, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, taa_blend); + gl_state_end_event(); } if (taa) { @@ -427,8 +429,8 @@ namespace rndr { s0 -= s1; t0 -= t1; - float_t w = (float_t)max_def(width, 1); - float_t h = (float_t)max_def(height, 1); + const float_t w = (float_t)max_def(width, 1); + const float_t h = (float_t)max_def(height, 1); quad_shader_data quad = {}; quad.g_texcoord_modifier = { 0.5f * s0, 0.5f * t0, 0.5f * s0 + s1, 0.5f * t0 + t1 }; // x * 0.5 * y0 + 0.5 * y0 + y1 quad.g_texel_size = { scale / w, scale / h, w, h }; diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index 6f3e7e6d..ce7b33f1 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -1080,9 +1080,6 @@ namespace rndr { star_catalog_draw(); draw_pass_3d_translucent(rctx, - draw_pass_3d[DRAW_PASS_3D_OPAQUE], - draw_pass_3d[DRAW_PASS_3D_TRANSPARENT], - draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT], mdl::OBJ_TYPE_OPAQUE_ALPHA_ORDER_3, mdl::OBJ_TYPE_TRANSPARENT_ALPHA_ORDER_3, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_3); @@ -1121,9 +1118,6 @@ namespace rndr { gl_state_set_depth_mask(GL_TRUE); draw_pass_3d_translucent(rctx, - draw_pass_3d[DRAW_PASS_3D_OPAQUE], - draw_pass_3d[DRAW_PASS_3D_TRANSPARENT], - draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT], mdl::OBJ_TYPE_OPAQUE_ALPHA_ORDER_2, mdl::OBJ_TYPE_TRANSPARENT_ALPHA_ORDER_2, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2); @@ -1136,9 +1130,6 @@ namespace rndr { gl_state_enable_depth_test(); gl_state_set_depth_mask(GL_TRUE); draw_pass_3d_translucent(rctx, - draw_pass_3d[DRAW_PASS_3D_OPAQUE], - draw_pass_3d[DRAW_PASS_3D_TRANSPARENT], - draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT], mdl::OBJ_TYPE_OPAQUE_ALPHA_ORDER_1, mdl::OBJ_TYPE_TRANSPARENT_ALPHA_ORDER_1, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1); @@ -1156,9 +1147,6 @@ namespace rndr { gl_state_disable_blend(); draw_pass_3d_translucent(rctx, - draw_pass_3d[DRAW_PASS_3D_OPAQUE], - draw_pass_3d[DRAW_PASS_3D_TRANSPARENT], - draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT], mdl::OBJ_TYPE_OPAQUE_ALPHA_ORDER_2_LOCAL, mdl::OBJ_TYPE_TRANSPARENT_ALPHA_ORDER_2_LOCAL, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2_LOCAL); @@ -1987,11 +1975,11 @@ static void draw_pass_3d_translucent(render_context* rctx, bool opaque_enable, for (int32_t i = 0; i < count; i++) { int32_t alpha = alpha_array[i]; rend->transparency_copy(); - if (opaque_enable && rctx->disp_manager->get_obj_count(opaque)) + if (rctx->render_manager->draw_pass_3d[DRAW_PASS_3D_OPAQUE] && rctx->disp_manager->get_obj_count(opaque)) rctx->disp_manager->draw(opaque, 0, true, alpha); - if (transparent_enable && rctx->disp_manager->get_obj_count(transparent)) + if (rctx->render_manager->draw_pass_3d[DRAW_PASS_3D_TRANSPARENT] && rctx->disp_manager->get_obj_count(transparent)) rctx->disp_manager->draw(transparent, 0, true, alpha); - if (translucent_enable && rctx->disp_manager->get_obj_count(translucent)) { + if (rctx->render_manager->draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT] && rctx->disp_manager->get_obj_count(translucent)) { gl_state_enable_blend(); rctx->disp_manager->draw(translucent, 0, true, alpha); gl_state_disable_blend(); @@ -2003,7 +1991,7 @@ static void draw_pass_3d_translucent(render_context* rctx, bool opaque_enable, static int32_t draw_pass_3d_translucent_count_layers(render_context* rctx, int32_t* alpha_array, mdl::ObjType opaque, mdl::ObjType transparent, mdl::ObjType translucent) { - bool arr[256] = { 0 }; + bool arr[0x100] = { false }; draw_pass_3d_translucent_has_objects(rctx, arr, opaque); draw_pass_3d_translucent_has_objects(rctx, arr, transparent); diff --git a/src/CRE/shared.hpp b/src/CRE/shared.hpp index 194be1c8..b3625e97 100644 --- a/src/CRE/shared.hpp +++ b/src/CRE/shared.hpp @@ -10,6 +10,14 @@ #include "../KKdLib/vec.hpp" #include "static_var.hpp" +enum blur_filter_mode { + BLUR_FILTER_4 = 0x00, + BLUR_FILTER_9 = 0x01, + BLUR_FILTER_16 = 0x02, + BLUR_FILTER_32 = 0x03, + BLUR_FILTER_MAX = 0x04, +}; + extern void fbo_blit(GLuint src_fbo, GLuint dst_fbo, GLint src_x, GLint src_y, GLint src_width, GLint src_height, GLint dst_x, GLint dst_y, GLint dst_width, GLint dst_height, GLbitfield mask, GLenum filter); diff --git a/src/CRE/static_var.hpp b/src/CRE/static_var.hpp index 8e3f634e..f74f0a9b 100644 --- a/src/CRE/static_var.hpp +++ b/src/CRE/static_var.hpp @@ -12,14 +12,6 @@ #include "../KKdLib/vec.hpp" #include "gl.hpp" -enum blur_filter_mode { - BLUR_FILTER_4 = 0, - BLUR_FILTER_9, - BLUR_FILTER_16, - BLUR_FILTER_32, - BLUR_FILTER_MAX, -}; - enum draw_pass_3d_type { DRAW_PASS_3D_OPAQUE = 0, DRAW_PASS_3D_TRANSLUCENT,