From 83624fa4f87d23c8505ffe81734e9e822f4430ea Mon Sep 17 00:00:00 2001 From: korenkonder Date: Tue, 25 Jun 2024 22:56:58 +0300 Subject: [PATCH] `Shader`: total overhaul of permutations and shader flags --- res/ft_shaders.farc | Bin 130112 -> 110208 bytes src/DivaGL/DivaGL.vcxproj | 2 +- src/DivaGL/Glitter/render_scene.cpp | 32 +- src/DivaGL/effect.cpp | 2 +- src/DivaGL/mdl/disp_manager.cpp | 14 +- src/DivaGL/mdl/draw_object.cpp | 32 +- src/DivaGL/render.cpp | 94 +- src/DivaGL/render.hpp | 4 +- src/DivaGL/render_context.cpp | 79 ++ src/DivaGL/render_context.hpp | 106 +- src/DivaGL/render_manager.cpp | 20 +- src/DivaGL/shader.cpp | 117 +- src/DivaGL/shader.hpp | 15 +- src/DivaGL/shader_ft.cpp | 1649 +++++++-------------------- src/DivaGL/shader_ft.hpp | 16 - src/DivaGL/shadow.cpp | 36 +- src/DivaGL/shadow.hpp | 4 +- src/DivaGL/uniform.hpp | 12 +- 18 files changed, 751 insertions(+), 1483 deletions(-) diff --git a/res/ft_shaders.farc b/res/ft_shaders.farc index c7459f1d23a49f6bf1834e4456caa8556479cd81..9b4793d5d35646139643dbef18adbe1410c37b4a 100644 GIT binary patch delta 102452 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%0AU~C=# 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 delta 122465 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 z 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 diff --git a/src/DivaGL/DivaGL.vcxproj b/src/DivaGL/DivaGL.vcxproj index 7ea7ceb..f09aa4c 100644 --- a/src/DivaGL/DivaGL.vcxproj +++ b/src/DivaGL/DivaGL.vcxproj @@ -107,7 +107,7 @@ del "$(SolutionDir)bin\$(TargetName).lib" $(IntDir)/%(RelativeDir) - Size + Speed false diff --git a/src/DivaGL/Glitter/render_scene.cpp b/src/DivaGL/Glitter/render_scene.cpp index 2c6054f..0201d94 100644 --- a/src/DivaGL/Glitter/render_scene.cpp +++ b/src/DivaGL/Glitter/render_scene.cpp @@ -165,13 +165,13 @@ namespace Glitter { case PARTICLE_QUAD: switch (rend_group->fog_type) { default: - uniform->arr[U_FOG_HEIGHT] = 0; + uniform->arr[U_FOG_STAGE] = 0; break; case Glitter::FOG_DEPTH: - uniform->arr[U_FOG_HEIGHT] = 1; + uniform->arr[U_FOG_STAGE] = 1; break; case Glitter::FOG_HEIGHT: - uniform->arr[U_FOG_HEIGHT] = 2; + uniform->arr[U_FOG_STAGE] = 2; break; } @@ -194,7 +194,7 @@ namespace Glitter { gl_state_disable_cull_face(); break; case PARTICLE_LINE: - uniform->arr[U_FOG_HEIGHT] = 0; + uniform->arr[U_FOG_STAGE] = 0; uniform->arr[U_ALPHA_BLEND] = 2; gl_state_enable_depth_test(); @@ -203,7 +203,7 @@ namespace Glitter { gl_state_set_cull_face_mode(GL_BACK); break; case PARTICLE_LOCUS: - uniform->arr[U_FOG_HEIGHT] = 0; + uniform->arr[U_FOG_STAGE] = 0; uniform->arr[U_ALPHA_BLEND] = 2; gl_state_enable_depth_test(); @@ -212,9 +212,13 @@ namespace Glitter { break; } + rctx->obj_shader.set_shader_flags(uniform->arr); + rctx->obj_shader_ubo.WriteMemory(rctx->obj_shader); + shaders_ft.set(SHADER_FT_GLITTER_PT); - rctx->obj_scene_ubo.Bind(0); - rctx->glitter_batch_ubo.Bind(2); + rctx->obj_shader_ubo.Bind(0); + rctx->obj_scene_ubo.Bind(1); + rctx->glitter_batch_ubo.Bind(3); switch (rend_group->type) { case PARTICLE_QUAD: gl_state_bind_vertex_array(rend_group->vao); @@ -2006,13 +2010,13 @@ namespace Glitter { switch (rend_group->fog_type) { default: - uniform->arr[U_FOG_HEIGHT] = 0; + uniform->arr[U_FOG_STAGE] = 0; break; case Glitter::FOG_DEPTH: - uniform->arr[U_FOG_HEIGHT] = 1; + uniform->arr[U_FOG_STAGE] = 1; break; case Glitter::FOG_HEIGHT: - uniform->arr[U_FOG_HEIGHT] = 2; + uniform->arr[U_FOG_STAGE] = 2; break; } @@ -2038,9 +2042,13 @@ namespace Glitter { else gl_state_disable_cull_face(); + rctx->obj_shader.set_shader_flags(uniform->arr); + rctx->obj_shader_ubo.WriteMemory(rctx->obj_shader); + shaders_ft.set(SHADER_FT_GLITTER_PT); - rctx->obj_scene_ubo.Bind(0); - rctx->glitter_batch_ubo.Bind(2); + rctx->obj_shader_ubo.Bind(0); + rctx->obj_scene_ubo.Bind(1); + rctx->glitter_batch_ubo.Bind(3); switch (rend_group->type) { case PARTICLE_QUAD: gl_state_bind_vertex_array(rend_group->vao); diff --git a/src/DivaGL/effect.cpp b/src/DivaGL/effect.cpp index ecec72e..ba8e819 100644 --- a/src/DivaGL/effect.cpp +++ b/src/DivaGL/effect.cpp @@ -1958,7 +1958,7 @@ void water_particle::draw(mat4* mat) { shaders_ft.set(SHADER_FT_W_PTCL); gl_state_bind_vertex_array(rctx->common_vao); - water_particle_scene_ubo.Bind(4); + water_particle_scene_ubo.Bind(5); ssbo.Bind(0); texture* tex = texture_manager_get_texture(splash_tex_id); if (tex) diff --git a/src/DivaGL/mdl/disp_manager.cpp b/src/DivaGL/mdl/disp_manager.cpp index d6feff2..eea2844 100644 --- a/src/DivaGL/mdl/disp_manager.cpp +++ b/src/DivaGL/mdl/disp_manager.cpp @@ -1989,9 +1989,10 @@ namespace mdl { uniform_value_reset(); gl_state_get(); - rctx->obj_scene_ubo.Bind(0); - rctx->obj_batch_ubo.Bind(1); - rctx->obj_skinning_ubo.Bind(3); + rctx->obj_shader_ubo.Bind(0); + rctx->obj_scene_ubo.Bind(1); + rctx->obj_batch_ubo.Bind(2); + rctx->obj_skinning_ubo.Bind(4); switch (type) { case OBJ_TYPE_TRANSLUCENT: @@ -2148,9 +2149,10 @@ namespace mdl { uniform_value_reset(); gl_state_get(); - rctx->obj_scene_ubo.Bind(0); - rctx->obj_batch_ubo.Bind(1); - rctx->obj_skinning_ubo.Bind(3); + rctx->obj_shader_ubo.Bind(0); + rctx->obj_scene_ubo.Bind(1); + rctx->obj_batch_ubo.Bind(2); + rctx->obj_skinning_ubo.Bind(4); switch (type) { case OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1: diff --git a/src/DivaGL/mdl/draw_object.cpp b/src/DivaGL/mdl/draw_object.cpp index 105d631..a937acf 100644 --- a/src/DivaGL/mdl/draw_object.cpp +++ b/src/DivaGL/mdl/draw_object.cpp @@ -52,7 +52,10 @@ namespace mdl { GL_UNSIGNED_INT, }; + rctx->obj_shader.set_shader_flags(uniform->arr); + rctx->obj_shader_ubo.WriteMemory(rctx->obj_shader); rctx->obj_batch_ubo.WriteMemory(rctx->obj_batch); + if (primitive_type == OBJ_PRIMITIVE_TRIANGLE_STRIP && index_format == OBJ_INDEX_U16) shaders_ft.draw_range_elements(GL_TRIANGLE_STRIP, start, end, count, GL_UNSIGNED_SHORT, (void*)indices); @@ -419,7 +422,6 @@ namespace mdl { draw_object_material_set_uniform(material, false); if (material->material.attrib.m.alpha_texture) uniform->arr[U_TEXTURE_COUNT] = 0; - rctx->obj_batch.g_texture_blend = { (float_t)uniform->arr[U_TEXTURE_BLEND], 0.0f, 0.0f, 0.0f }; shaders_ft.set(draw_state.shader_index); } @@ -604,11 +606,10 @@ static bool draw_object_blend_set( static bool draw_object_blend_set_check_use_default_blend(int32_t index) { bool use_default_blend[] = { false, false, true, false, true, false, false, true, true, true, false, false, - false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false + false, }; if (index >= 0 && index < SHADER_FT_MAX) @@ -629,11 +630,8 @@ static void draw_object_chara_color_fog_set(const mdl::ObjSubMeshArgs* args, boo obj_material_attrib_member attrib = args->material->material.attrib.m; if (!attrib.no_fog && !disable_fog) { - if (attrib.has_fog_height) - uniform->arr[U_FOG_HEIGHT] = 2 + attrib.fog_height; - else - uniform->arr[U_FOG_HEIGHT] = 1; - uniform->arr[U_FOG] = draw_state.fog_height ? 2 : 1; + uniform->arr[U_FOG_STAGE] = attrib.has_fog_height ? (attrib.fog_height ? 3 : 2) : 1; + uniform->arr[U_FOG_CHARA] = draw_state.fog_height ? 2 : 1; } } @@ -660,17 +658,17 @@ static void draw_object_material_set_default(const mdl::ObjSubMeshArgs* args, bo material->material.shader_info.get_lighting_type(); bool disable_fog = draw_object_blend_set(args, lighting_type); draw_object_material_set_uniform(material, false); - if (!draw_state.light) - uniform->arr[U_LIGHT_0] = 0; + if (!draw_state.shadow) + uniform->arr[U_STAGE_SHADOW] = 0; else if (args->self_shadow) - uniform->arr[U_LIGHT_0] = 1; + uniform->arr[U_STAGE_SHADOW] = 1; else - uniform->arr[U_LIGHT_0] = args->sub_mesh->attrib.m.recieve_shadow ? 1 : 0; - uniform->arr[U_SHADOW] = 0; - uniform->arr[U_SELF_SHADOW] = draw_state.self_shadow ? 1 : 0; + uniform->arr[U_STAGE_SHADOW] = args->sub_mesh->attrib.m.recieve_shadow ? 1 : 0; + uniform->arr[U_CHARA_SHADOW2] = 0; + uniform->arr[U_CHARA_SHADOW] = draw_state.self_shadow ? 1 : 0; const obj_material_texture_data* texdata = material->material.texdata; - uniform->arr[U_SHADOW] = args->shadow > SHADOW_CHARA; + uniform->arr[U_CHARA_SHADOW2] = args->shadow > SHADOW_CHARA; for (int32_t i = 0, j = 0; i < 8; i++, texdata++) { if (texdata->tex_index == -1) continue; @@ -815,10 +813,9 @@ static void draw_object_material_set_default(const mdl::ObjSubMeshArgs* args, bo else shaders_ft.set(SHADER_FT_CONSTANT); - rctx->obj_batch.g_texture_blend = { (float_t)uniform->arr[U_TEXTURE_BLEND], 0.0f, 0.0f, 0.0f }; if (lighting_type != OBJ_MATERIAL_SHADER_LIGHTING_CONSTANT) { float_t material_shininess; - if (material->material.shader.index == SHADER_FT_GLASEYE/*SHADER_FT_EYEBALL*/) + if (material->material.shader.index == SHADER_FT_GLASEYE) material_shininess = 10.0f; else { material_shininess = (material->material.color.shininess - 16.0f) * (float_t)(1.0 / 112.0); @@ -965,7 +962,6 @@ static void draw_object_material_set_reflect(const mdl::ObjSubMeshArgs* args) { } draw_object_material_set_uniform(material, true); - rctx->obj_batch.g_texture_blend = { (float_t)uniform->arr[U_TEXTURE_BLEND], 0.0f, 0.0f, 0.0f }; shaders_ft.set(draw_state.shader_index); rctx->obj_batch.g_material_state_ambient = ambient; rctx->obj_batch.g_material_state_diffuse = diffuse; diff --git a/src/DivaGL/render.cpp b/src/DivaGL/render.cpp index d66b7b7..0826f1f 100644 --- a/src/DivaGL/render.cpp +++ b/src/DivaGL/render.cpp @@ -34,7 +34,7 @@ namespace rndr { spot_weight = 0.0f; } - void Render::apply_post_process() { + void Render::apply_post_process(texture* light_proj_tex, int32_t npr_param) { for (int32_t i = 0; i < 8; i++) gl_state_bind_sampler(i, 0); @@ -51,7 +51,7 @@ namespace rndr { get_blur(); calc_exposure(); - apply_tone_map(); + apply_tone_map(light_proj_tex, npr_param); apply_mlaa(taa_texture_selector, 2, mlaa); @@ -1191,47 +1191,18 @@ namespace rndr { } } - void Render::apply_tone_map() { + void Render::apply_tone_map(texture* light_proj_tex, int32_t npr_param) { if (!this) return; - + gl_state_begin_event("PostProcess::tone_map"); update_tone_map_lut(); uniform->arr[U_TONE_MAP] = (int32_t)tone_map; uniform->arr[U_FLARE] = 0; - uniform->arr[U_SCENE_FADE] = scene_fade_alpha[scene_fade_index] > 0.01f ? 1 : 0; uniform->arr[U_AET_BACK] = 0; uniform->arr[U_LIGHT_PROJ] = 0; - //uniform->arr[U25] = 0; - - gl_state_active_bind_texture_2d(0, rend_texture[0].GetColorTex()); - gl_state_active_bind_texture_2d(1, reduce_tex_draw); - gl_state_active_bind_texture_2d(2, tonemap_lut_texture); - gl_state_active_bind_texture_2d(3, exposure_tex); - gl_state_active_bind_texture_2d(4, rctx->empty_texture_2d); - gl_state_active_bind_texture_2d(5, rctx->empty_texture_2d); - gl_state_active_bind_texture_2d(6, rctx->empty_texture_2d); - gl_state_bind_sampler(0, rctx->render_samplers[1]); - gl_state_bind_sampler(1, rctx->render_samplers[2]); - gl_state_bind_sampler(2, rctx->render_samplers[0]); - gl_state_bind_sampler(3, rctx->render_samplers[3]); - gl_state_bind_sampler(4, rctx->render_samplers[2]); - gl_state_bind_sampler(5, rctx->render_samplers[2]); - gl_state_bind_sampler(6, rctx->render_samplers[2]); - - if (aet_back) { - gl_state_active_bind_texture_2d(6, aet_back_tex->glid); - uniform->arr[U_AET_BACK] = 1; - } - - static texture* (FASTCALL * litproj_texture_get)() = (texture * (FASTCALL*)())0x0000000140350600; - texture* light_proj_tex = litproj_texture_get(); - if (light_proj_tex) { - gl_state_active_bind_texture_2d(6, light_proj_tex->glid); - uniform->arr[U_LIGHT_PROJ] = 1; - } int32_t scene_fade_blend_func = this->scene_fade_blend_func[scene_fade_index]; @@ -1258,14 +1229,26 @@ namespace rndr { shader_data.g_texcoord_transforms[2] = { 1.0f, 0.0f, 0.0f, 0.0f }; shader_data.g_texcoord_transforms[3] = { 0.0f, 1.0f, 0.0f, 0.0f }; - if (lens_flare_texture) { - static const vec4 border_color = 0.0f; + gl_state_active_bind_texture_2d(0, rend_texture[0].GetColorTex()); + gl_state_bind_sampler(0, rctx->render_samplers[1]); + gl_state_active_bind_texture_2d(1, reduce_tex_draw); + gl_state_bind_sampler(1, rctx->render_samplers[2]); + if (tone_map == TONE_MAP_YCC_EXPONENT) { + gl_state_active_bind_texture_2d(2, tonemap_lut_texture); + gl_state_bind_sampler(2, rctx->render_samplers[0]); + } + + gl_state_active_bind_texture_2d(3, exposure_tex); + gl_state_bind_sampler(3, rctx->render_samplers[3]); + + if (lens_flare_texture) { const float_t aspect = (float_t)height / (float_t)width; uniform->arr[U_FLARE] = 1; gl_state_active_bind_texture_2d(4, lens_flare_texture); gl_state_bind_sampler(4, rctx->render_samplers[2]); + mat4 mat; mat4_translate(0.5f, 0.5f, 0.0f, &mat); mat4_scale_rot(&mat, 0.75f, 0.75f, 1.0f, &mat); @@ -1282,6 +1265,7 @@ namespace rndr { uniform->arr[U_FLARE] = 2; gl_state_active_bind_texture_2d(5, lens_shaft_texture); gl_state_bind_sampler(5, rctx->render_samplers[2]); + mat4_translate(0.5f, 0.5f, 0.0f, &mat); mat4_scale_rot(&mat, lens_shaft_scale, lens_shaft_scale, 1.0f, &mat); mat4_mul_rotate_z(&mat, (lens_flare_pos.x / (float_t)width) @@ -1294,31 +1278,47 @@ namespace rndr { shader_data.g_texcoord_transforms[7] = mat.row1; } else { + gl_state_active_bind_texture_2d(5, rctx->empty_texture_2d); + gl_state_bind_sampler(5, rctx->render_samplers[2]); + shader_data.g_texcoord_transforms[6] = { 1.0f, 0.0f, 0.0f, 0.0f }; shader_data.g_texcoord_transforms[7] = { 0.0f, 1.0f, 0.0f, 0.0f }; } } else { + gl_state_active_bind_texture_2d(4, rctx->empty_texture_2d); + gl_state_bind_sampler(4, rctx->render_samplers[2]); + gl_state_active_bind_texture_2d(5, rctx->empty_texture_2d); + gl_state_bind_sampler(5, rctx->render_samplers[2]); + shader_data.g_texcoord_transforms[4] = { 1.0f, 0.0f, 0.0f, 0.0f }; shader_data.g_texcoord_transforms[5] = { 0.0f, 1.0f, 0.0f, 0.0f }; shader_data.g_texcoord_transforms[6] = { 1.0f, 0.0f, 0.0f, 0.0f }; shader_data.g_texcoord_transforms[7] = { 0.0f, 1.0f, 0.0f, 0.0f }; } - if (render_manager->npr_param == 1) { - gl_state_active_bind_texture_2d(14, rend_texture[0].GetDepthTex()); - /*gl_state_active_bind_texture_2d(16, sss_contour_texture->GetColorTex()); - gl_state_active_bind_texture_2d(17, sss_contour_texture->GetDepthTex());*/ - } - else { - gl_state_active_bind_texture_2d(14, rctx->empty_texture_2d); - /*gl_state_active_bind_texture_2d(16, rctx->empty_texture_2d); - gl_state_active_bind_texture_2d(17, rctx->empty_texture_2d);*/ + if (aet_back) { + gl_state_active_bind_texture_2d(6, aet_back_tex->glid); + gl_state_bind_sampler(6, rctx->render_samplers[2]); + uniform->arr[U_AET_BACK] = 1; } - gl_state_bind_sampler(14, rctx->render_samplers[1]); - /*gl_state_bind_sampler(16, rctx->render_samplers[1]); - gl_state_bind_sampler(17, rctx->render_samplers[1]);*/ + if (light_proj_tex) { + uniform->arr[U_LIGHT_PROJ] = 1; + gl_state_active_bind_texture_2d(7, light_proj_tex->glid); + gl_state_bind_sampler(7, rctx->render_samplers[2]); + + shader_data.g_flare_coef.z = 1.0f; + } + else { + gl_state_active_bind_texture_2d(7, rctx->empty_texture_2d); + gl_state_bind_sampler(7, rctx->render_samplers[2]); + } + + if (aet_back && npr_param == 1) { + gl_state_active_bind_texture_2d(14, rend_texture[0].GetDepthTex()); + gl_state_bind_sampler(14, rctx->render_samplers[1]); + } rctx->tone_map_ubo.WriteMemory(shader_data); diff --git a/src/DivaGL/render.hpp b/src/DivaGL/render.hpp index 0ed3f5b..d6ff429 100644 --- a/src/DivaGL/render.hpp +++ b/src/DivaGL/render.hpp @@ -173,7 +173,7 @@ namespace rndr { int32_t update; FrameTexture frame_texture[6]; - void apply_post_process(); + void apply_post_process(texture* light_proj_tex, int32_t npr_param); void bind_render_texture(bool aet_back = false); void calc_exposure_chara_data(); void calc_projection_matrix(mat4* mat, float_t fov, float_t aspect, float_t z_near, float_t z_far, @@ -199,7 +199,7 @@ namespace rndr { private: void apply_mlaa(int32_t destination, int32_t source, int32_t mlaa); - void apply_tone_map(); + void apply_tone_map(texture* light_proj_tex, int32_t npr_param); void calc_exposure(); void calc_gaussian_blur(float_t start, float_t step, int32_t kernel_size, float_t radius_scale, float_t intensity_scale); diff --git a/src/DivaGL/render_context.cpp b/src/DivaGL/render_context.cpp index 5362803..212987a 100644 --- a/src/DivaGL/render_context.cpp +++ b/src/DivaGL/render_context.cpp @@ -5,6 +5,7 @@ #include "render_context.hpp" #include "render_manager.hpp" +#include "uniform.hpp" draw_state_struct& draw_state = *(draw_state_struct*)0x00000001411A32B0; @@ -51,6 +52,81 @@ void draw_state_struct::set_fog_height(bool value) { fog_height = value; } +void obj_shader_shader_data::set_shader_flags(int32_t* shader_flags) { + g_shader_flags.x.m.alpha_mask = shader_flags[U_ALPHA_MASK]; + g_shader_flags.x.m.alpha_test = shader_flags[U_ALPHA_TEST]; + g_shader_flags.x.m.aniso = shader_flags[U_ANISO]; + g_shader_flags.x.m.aet_back = shader_flags[U_AET_BACK]; + g_shader_flags.x.m.texture_blend = shader_flags[U_TEXTURE_BLEND]; + g_shader_flags.x.m.unk = 0; //shader_flags[U_UNK_NEW_IN_MM_IDK_WHAT_TO_DO_WITH_IT]; + g_shader_flags.x.m.chara_color = shader_flags[U_CHARA_COLOR]; + g_shader_flags.x.m.clip_plane = shader_flags[U_CLIP_PLANE]; + g_shader_flags.x.m.u08 = shader_flags[U08]; + g_shader_flags.x.m.depth_peel = shader_flags[U_DEPTH_PEEL]; + g_shader_flags.x.m.depth = shader_flags[U_DEPTH]; + g_shader_flags.x.m.u0b = shader_flags[U0B]; + g_shader_flags.x.m.alpha_blend = shader_flags[U_ALPHA_BLEND]; + g_shader_flags.x.m.ripple_emit = shader_flags[U_RIPPLE_EMIT]; + g_shader_flags.x.m.esm_filter = shader_flags[U_ESM_FILTER]; + g_shader_flags.x.m.exposure = shader_flags[U_EXPOSURE]; + g_shader_flags.x.m.scene_fade = shader_flags[U_SCENE_FADE]; + g_shader_flags.x.m.fade = shader_flags[U_FADE]; + g_shader_flags.x.m.stage_ambient = shader_flags[U_STAGE_AMBIENT]; + g_shader_flags.x.m.flare = shader_flags[U_FLARE]; + g_shader_flags.y.m.fog_stage = shader_flags[U_FOG_STAGE]; + g_shader_flags.y.m.fog_chara = shader_flags[U_FOG_CHARA]; + g_shader_flags.y.m.u16 = shader_flags[U16]; + g_shader_flags.y.m.gauss = shader_flags[U_GAUSS]; + g_shader_flags.y.m.eyeball = shader_flags[U_EYEBALL]; + g_shader_flags.y.m.image_filter = shader_flags[U_IMAGE_FILTER]; + g_shader_flags.y.m.instance = shader_flags[U_INSTANCE]; + g_shader_flags.y.m.tone_curve = shader_flags[U_TONE_CURVE]; + g_shader_flags.y.m.light_proj = shader_flags[U_LIGHT_PROJ]; + g_shader_flags.y.m.magnify = shader_flags[U_MAGNIFY]; + g_shader_flags.y.m.membrane = shader_flags[U_MEMBRANE]; + g_shader_flags.y.m.mlaa = shader_flags[U_MLAA]; + g_shader_flags.y.m.mlaa_search = shader_flags[U_MLAA_SEARCH]; + g_shader_flags.y.m.morph_color = shader_flags[U_MORPH_COLOR]; + g_shader_flags.y.m.morph = shader_flags[U_MORPH]; + g_shader_flags.y.m.movie = shader_flags[U_MOVIE]; + g_shader_flags.y.m.u24 = shader_flags[U24]; + g_shader_flags.y.m.u25 = shader_flags[U25]; + g_shader_flags.y.m.npr_normal = shader_flags[U_NPR_NORMAL]; + g_shader_flags.z.m.npr = shader_flags[U_NPR]; + g_shader_flags.z.m.stage_shadow2 = shader_flags[U_STAGE_SHADOW2]; + g_shader_flags.z.m.reflect = shader_flags[U_REFLECT]; + g_shader_flags.z.m.reduce = shader_flags[U_REDUCE]; + g_shader_flags.z.m.chara_shadow = shader_flags[U_CHARA_SHADOW]; + g_shader_flags.z.m.chara_shadow2 = shader_flags[U_CHARA_SHADOW2]; + g_shader_flags.z.m.u2d = shader_flags[U2D]; + g_shader_flags.z.m.u2e = shader_flags[U2E]; + g_shader_flags.z.m.show_vector = shader_flags[U_SHOW_VECTOR]; + g_shader_flags.z.m.skinning = shader_flags[U_SKINNING]; + g_shader_flags.z.m.snow_particle = shader_flags[U_SNOW_PARTICLE]; + g_shader_flags.z.m.specular_ibl = shader_flags[U_SPECULAR_IBL]; + g_shader_flags.z.m.combiner = shader_flags[U_COMBINER]; + g_shader_flags.z.m.tex_0_type = shader_flags[U_TEX_0_TYPE]; + g_shader_flags.z.m.tex_1_type = shader_flags[U_TEX_1_TYPE]; + g_shader_flags.z.m.sss_filter = shader_flags[U_SSS_FILTER]; + g_shader_flags.w.m.sss_chara = shader_flags[U_SSS_CHARA]; + g_shader_flags.w.m.star = shader_flags[U_STAR]; + g_shader_flags.w.m.texture_count = shader_flags[U_TEXTURE_COUNT]; + g_shader_flags.w.m.env_map = shader_flags[U_ENV_MAP]; + g_shader_flags.w.m.ripple = shader_flags[U_RIPPLE]; + g_shader_flags.w.m.translucency = shader_flags[U_TRANSLUCENCY]; + g_shader_flags.w.m.normal = shader_flags[U_NORMAL]; + g_shader_flags.w.m.transparency = shader_flags[U_TRANSPARENCY]; + g_shader_flags.w.m.water_reflect = shader_flags[U_WATER_REFLECT]; + g_shader_flags.w.m.u40 = shader_flags[U40]; + g_shader_flags.w.m.u41 = shader_flags[U41]; + g_shader_flags.w.m.stage_shadow = shader_flags[U_STAGE_SHADOW]; + g_shader_flags.w.m.specular = shader_flags[U_SPECULAR]; + g_shader_flags.w.m.tone_map = shader_flags[U_TONE_MAP]; + g_shader_flags.w.m.u45 = shader_flags[U45]; + g_shader_flags.w.m.dof = 0; //shader_flags[U_DOF]; // Added + g_shader_flags.w.m.dof_stage = 0; //shader_flags[U_DOF_STAGE]; // Added +} + void obj_scene_shader_data::set_g_irradiance_r_transforms(const mat4& mat) { mat4 temp; mat4_transpose(&mat, &temp); @@ -267,9 +343,11 @@ samplers(), render_samplers(), sprite_samplers(), screen_width(), screen_height( sun_quad_ubo.Create(sizeof(sun_quad_shader_data)); tone_map_ubo.Create(sizeof(tone_map_shader_data)); + obj_shader = {}; obj_scene = {}; obj_batch = {}; obj_skinning = {}; + obj_shader_ubo.Create(sizeof(obj_shader_shader_data)); obj_scene_ubo.Create(sizeof(obj_scene_shader_data)); obj_batch_ubo.Create(sizeof(obj_batch_shader_data)); obj_skinning_ubo.Create(sizeof(obj_skinning_shader_data)); @@ -403,6 +481,7 @@ render_context::~render_context() { obj_skinning_ubo.Destroy(); obj_batch_ubo.Destroy(); obj_scene_ubo.Destroy(); + obj_shader_ubo.Destroy(); tone_map_ubo.Destroy(); transparency_batch_ubo.Destroy(); diff --git a/src/DivaGL/render_context.hpp b/src/DivaGL/render_context.hpp index ba1063d..7a7b694 100644 --- a/src/DivaGL/render_context.hpp +++ b/src/DivaGL/render_context.hpp @@ -54,7 +54,7 @@ struct draw_state_struct { bool vertex_buffer; bool wireframe; bool wireframe_overlay; - bool light; + bool shadow; bool self_shadow; bool shader_debug_flag; bool use_global_material; @@ -139,6 +139,105 @@ struct glitter_batch_shader_data { vec4 g_state_material_emission; }; +struct obj_shader_shader_data { + struct { + union { + struct { + uint32_t alpha_mask : 1; // bit 0 + uint32_t alpha_test : 1; // bit 1 + uint32_t aniso : 2; // bit 2:3 + uint32_t aet_back : 1; // bit 4 + uint32_t texture_blend : 3; // bit 5:7 + uint32_t unk : 2; // bit 8:9 + uint32_t chara_color : 1; // bit 10 + uint32_t clip_plane : 1; // bit 11 + uint32_t u08 : 1; // bit 12 + uint32_t depth_peel : 1; // bit 13 + uint32_t depth : 1; // bit 14 + uint32_t u0b : 1; // bit 15 + uint32_t alpha_blend : 3; // bit 16:18 + uint32_t ripple_emit : 1; // bit 19 + uint32_t esm_filter : 2; // bit 20:21 + uint32_t exposure : 2; // bit 22:23 + uint32_t scene_fade : 1; // bit 24 + uint32_t fade : 3; // bit 25:27 + uint32_t stage_ambient : 1; // bit 28 + uint32_t flare : 2; // bit 29:30 + } m; + uint32_t w; + } x; + union { + struct { + uint32_t fog_stage : 2; // bit 32+0:1 + uint32_t fog_chara : 2; // bit 32+2:3 + uint32_t u16 : 1; // bit 32+4 + uint32_t gauss : 2; // bit 32+5:6 + uint32_t eyeball : 1; // bit 32+7 + uint32_t image_filter : 3; // bit 32+8:10 + uint32_t instance : 1; // bit 32+11 + uint32_t tone_curve : 1; // bit 32+12 + uint32_t light_proj : 1; // bit 32+13 + uint32_t magnify : 4; // bit 32+14:17 + uint32_t membrane : 2; // bit 32+18:19 + uint32_t mlaa : 2; // bit 32+20:21 + uint32_t mlaa_search : 2; // bit 32+22:23 + uint32_t morph_color : 1; // bit 32+24 + uint32_t morph : 1; // bit 32+25 + uint32_t movie : 2; // bit 32+26:27 + uint32_t u24 : 2; // bit 32+28:29 + uint32_t u25 : 1; // bit 32+30 + uint32_t npr_normal : 1; // bit 32+31 + } m; + uint32_t w; + } y; + union { + struct { + uint32_t npr : 1; // bit 64+0 + uint32_t stage_shadow2 : 2; // bit 64+1:2 + uint32_t reflect : 2; // bit 64+3:4 + uint32_t reduce : 4; // bit 64+5:8 + uint32_t chara_shadow : 1; // bit 64+9 + uint32_t chara_shadow2 : 2; // bit 64+10:11 + uint32_t u2d : 3; // bit 64+12:14 + uint32_t u2e : 2; // bit 64+15:16 + uint32_t show_vector : 2; // bit 64+17:18 + uint32_t skinning : 1; // bit 64+19 + uint32_t snow_particle : 2; // bit 64+20:21 + uint32_t specular_ibl : 2; // bit 64+22:23 + uint32_t combiner : 1; // bit 64+24 + uint32_t tex_0_type : 2; // bit 64+25:26 + uint32_t tex_1_type : 2; // bit 64+27:28 + uint32_t sss_filter : 2; // bit 64+29:30 + } m; + uint32_t w; + } z; + union { + struct { + uint32_t sss_chara : 1; // bit 96+0 + uint32_t star : 1; // bit 96+1 + uint32_t texture_count : 2; // bit 96+2:3 + uint32_t env_map : 1; // bit 96+4 + uint32_t ripple : 2; // bit 96+5:6 + uint32_t translucency : 1; // bit 96+7 + uint32_t normal : 1; // bit 96+8 + uint32_t transparency : 1; // bit 96+9 + uint32_t water_reflect : 1; // bit 96+10 + uint32_t u40 : 1; // bit 96+11 + uint32_t u41 : 1; // bit 96+12 + uint32_t stage_shadow : 1; // bit 96+13 + uint32_t specular : 1; // bit 96+14 + uint32_t tone_map : 2; // bit 96+15 + uint32_t u45 : 1; // bit 96+16 + uint32_t dof : 1; // bit 96+17 // Added + uint32_t dof_stage : 3; // bit 96+18 // Added + } m; + uint32_t w; + } w; + } g_shader_flags; + + void set_shader_flags(int32_t* shader_flags); +}; + struct obj_scene_shader_data { vec4 g_irradiance_r_transforms[4]; vec4 g_irradiance_g_transforms[4]; @@ -226,7 +325,6 @@ struct obj_batch_shader_data { vec4 g_bump_depth; vec4 g_intensity; vec4 g_reflect_uv_scale; - vec4 g_texture_blend; void set_g_joint(const mat4& mat); void set_g_texcoord_transforms(int32_t index, const mat4& mat); @@ -262,7 +360,7 @@ struct sun_quad_shader_data { struct tone_map_shader_data { vec4 g_exposure; - vec4 g_flare_coef; + vec4 g_flare_coef; //xy=flare_coef, z=light_proj vec4 g_fade_color; vec4 g_tone_scale; //xyz=tone_scale, w=fade_func vec4 g_tone_offset; //xyz=tone_offset, w=inv_tone @@ -305,9 +403,11 @@ struct render_context { GLUniformBuffer transparency_batch_ubo; GLUniformBuffer tone_map_ubo; + obj_shader_shader_data obj_shader; obj_scene_shader_data obj_scene; obj_batch_shader_data obj_batch; obj_skinning_shader_data obj_skinning; + GLUniformBuffer obj_shader_ubo; GLUniformBuffer obj_scene_ubo; GLUniformBuffer obj_batch_ubo; GLUniformBuffer obj_skinning_ubo; diff --git a/src/DivaGL/render_manager.cpp b/src/DivaGL/render_manager.cpp index e95c19b..f7279fc 100644 --- a/src/DivaGL/render_manager.cpp +++ b/src/DivaGL/render_manager.cpp @@ -961,7 +961,9 @@ namespace rndr { void RenderManager::pass_post_process() { gl_state_begin_event("pass_post_process"); - render->apply_post_process(); + + static texture* (FASTCALL * litproj_texture_get)() = (texture * (FASTCALL*)())0x0000000140350600; + render->apply_post_process(litproj_texture_get(), npr_param); gl_state_end_event(); } @@ -1286,7 +1288,7 @@ static void draw_pass_shadow_end_make_shadowmap(Shadow* shad, int32_t index, int gl_state_disable_scissor_test(); draw_state.shader_index = -1; - if (a3 == shad->num_light - 1) { + if (a3 == shad->num_shadow - 1) { draw_pass_shadow_filter(&shad->render_textures[3], &shad->render_textures[4], shad->curr_render_textures[0], shad->field_2DC, shad->field_2E0 / (shad->field_208 * 2.0f), false); @@ -1721,11 +1723,11 @@ static void draw_pass_3d_shadow_reset() { rctx->obj_scene.set_g_self_shadow_receivers(0, mat4_identity); rctx->obj_scene.set_g_self_shadow_receivers(1, mat4_identity); draw_state.self_shadow = false; - draw_state.light = false; + draw_state.shadow = false; } static void draw_pass_3d_shadow_set(Shadow* shad) { - if (shad->self_shadow && shad->num_light > 0) { + if (shad->self_shadow && shad->num_shadow > 0) { gl_state_active_bind_texture_2d(19, shad->render_textures[3].GetColorTex()); gl_state_active_bind_texture_2d(20, shad->render_textures[5].GetColorTex()); gl_state_active_texture(0); @@ -1743,9 +1745,9 @@ static void draw_pass_3d_shadow_set(Shadow* shad) { gl_state_bind_sampler(19, rctx->render_samplers[0]); gl_state_bind_sampler(20, rctx->render_samplers[0]); - if (shad->num_light > 0) { - draw_state.light = true; - uniform->arr[U_LIGHT_1] = shad->num_light > 1 ? 1 : 0; + if (shad->num_shadow > 0) { + draw_state.shadow = true; + uniform->arr[U_STAGE_SHADOW2] = shad->num_shadow > 1 ? 1 : 0; float_t shadow_range = shad->get_shadow_range(); for (int32_t i = 0; i < 2; i++) { @@ -1782,7 +1784,7 @@ static void draw_pass_3d_shadow_set(Shadow* shad) { int32_t j = 0; for (int32_t i = 0; i < 2; i++) - if (shad->light_enable[i]) { + if (shad->shadow_enable[i]) { gl_state_active_bind_texture_2d(6 + j, shad->curr_render_textures[1 + i]->GetColorTex()); glTexParameterfDLL(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 16.0f); j++; @@ -1805,7 +1807,7 @@ static void draw_pass_3d_shadow_set(Shadow* shad) { rctx->obj_scene.g_shadow_ambient1 = { 1.0f - ambient.x, 1.0f - ambient.y, 1.0f - ambient.z, 0.0f }; } else { - draw_state.light = false; + draw_state.shadow = false; for (int32_t i = 0; i < 2; i++) gl_state_active_bind_texture_2d(6 + i, shad->curr_render_textures[1 + i]->GetColorTex()); diff --git a/src/DivaGL/shader.cpp b/src/DivaGL/shader.cpp index e1ba067..e2cec5f 100644 --- a/src/DivaGL/shader.cpp +++ b/src/DivaGL/shader.cpp @@ -10,7 +10,6 @@ #include "../KKdLib/str_utils.hpp" #include "gl_state.hpp" #include "print.hpp" -#include "uniform.hpp" #include "wrap.hpp" #include @@ -21,13 +20,6 @@ struct program_binary { uint64_t hash; }; -struct program_spv { - size_t size; - size_t spv; -}; - -extern bool vulkan_render; - static GLuint shader_compile_shader(GLenum type, const char* data, const char* file); static GLuint shader_compile(const char* vert, const char* frag, const char* vp, const char* fp); static GLuint shader_compile_binary(const char* vert, const char* frag, const char* vp, const char* fp, @@ -36,7 +28,7 @@ static bool shader_load_binary_shader(program_binary* bin, GLuint* program, cons static void shader_update_data(shader_set_data* set); int32_t shader::bind(shader_set_data* set, uint32_t sub_index) { - set->curr_shader = 0; + set->curr_program = 0; if (num_sub < 1) return -1; @@ -50,33 +42,23 @@ int32_t shader::bind(shader_set_data* set, uint32_t sub_index) { int32_t unival_shad_curr = 1; int32_t unival_shad = 0; - int32_t uniform_val[SHADER_MAX_UNIFORM_VALUES] = {}; if (num_uniform > 0) { const int32_t* vp_unival_max = sub_shader->vp_unival_max; const int32_t* fp_unival_max = sub_shader->fp_unival_max; int32_t i = 0; - for (i = 0; i < num_uniform && i < sizeof(uniform_val) / sizeof(int32_t); i++) { - const int32_t unival = uniform->arr[use_uniform[i].first]; - const int32_t unival_max = use_uniform[i].second - ? max_def(vp_unival_max[i], fp_unival_max[i]) : 0; + for (i = 0; i < num_uniform; i++) { + const int32_t unival = uniform->arr[use_uniform[i]]; + const int32_t unival_max = max_def(vp_unival_max[i], fp_unival_max[i]); unival_shad += unival_shad_curr * min_def(unival, unival_max); unival_shad_curr *= unival_max + 1; - - int32_t unival_max_glsl = max_def(vp_unival_max[i], fp_unival_max[i]); - uniform_val[i] = min_def(unival, unival_max_glsl); } } - shader_sub_shader* shader = &sub_shader->shaders[unival_shad]; - set->curr_shader = shader; + GLuint program = sub_shader->programs[unival_shad]; + set->curr_program = program; - gl_state_use_program(shader->program); - if (shader->has_uniform_val - && memcmp(shader->uniform_val, uniform_val, sizeof(uniform_val))) { - memcpy(shader->uniform_val, uniform_val, sizeof(uniform_val)); - shader->uniform_val_update = true; - } + gl_state_use_program(program); return 0; } @@ -296,7 +278,7 @@ void shader::unbind() { gl_state_use_program(0); } -shader_set_data::shader_set_data() : size(), shaders(), curr_shader(), +shader_set_data::shader_set_data() : size(), shaders(), curr_program(), primitive_restart(), primitive_restart_index(), get_index_by_name_func() { } @@ -494,13 +476,12 @@ void shader_set_data::load(farc* f, bool ignore_cache, uint32_t uniform_vert_flags = 0; uint32_t uniform_frag_flags = 0; - for (int32_t k = 0; k < shader->num_uniform; k++) - if (shader->use_uniform[k].second) { - if (sub_table->vp_unival_max[k] > 0) - uniform_vert_flags |= 1 << k; - if (sub_table->fp_unival_max[k] > 0) - uniform_frag_flags |= 1 << k; - } + for (int32_t k = 0; k < shader->num_uniform; k++) { + if (sub_table->vp_unival_max[k] > 0) + uniform_vert_flags |= 1 << k; + if (sub_table->fp_unival_max[k] > 0) + uniform_frag_flags |= 1 << k; + } char uniform_vert_flags_buf[9]; char uniform_frag_flags_buf[9]; @@ -565,17 +546,16 @@ void shader_set_data::load(farc* f, bool ignore_cache, const int32_t* vp_unival_max = sub_table->vp_unival_max; const int32_t* fp_unival_max = sub_table->fp_unival_max; for (int32_t k = 0; k < num_uniform; k++) { - const int32_t unival_max = shader->use_uniform[k].second - ? max_def(vp_unival_max[k], fp_unival_max[k]) : 0; + const int32_t unival_max = max_def(vp_unival_max[k], fp_unival_max[k]); unival_shad_count += unival_shad_curr * unival_max; unival_shad_curr *= unival_max + 1; } if (!ignore_cache) program_data_binary.reserve(unival_shad_count); - shader_sub_shader* shaders = force_malloc(unival_shad_count); - sub->shaders = shaders; - if (shaders) { + GLuint* programs = force_malloc(unival_shad_count); + sub->programs = programs; + if (programs) { strcpy_s(vert_buf, sizeof(vert_buf), sub_table->vp); size_t vert_buf_pos = utf8_length(vert_buf); vert_buf[vert_buf_pos++] = '.'; @@ -594,38 +574,36 @@ void shader_set_data::load(farc* f, bool ignore_cache, for (int32_t k = 0; k < unival_shad_count; k++) { for (int32_t l = 0, m = k; l < num_uniform; l++) { - int32_t unival_max = (shader->use_uniform[l].second - ? max_def(vp_unival_max[l], fp_unival_max[l]) : 0) + 1; + int32_t unival_max = max_def(vp_unival_max[l], fp_unival_max[l]) + 1; vec_vert_data[l] = min_def(m % unival_max, vp_unival_max[l]); m /= unival_max; vert_buf[vert_buf_pos + l] = (char)('0' + vec_vert_data[l]); } for (int32_t l = 0, m = k; l < num_uniform; l++) { - int32_t unival_max = (shader->use_uniform[l].second - ? max_def(vp_unival_max[l], fp_unival_max[l]) : 0) + 1; + int32_t unival_max = max_def(vp_unival_max[l], fp_unival_max[l]) + 1; vec_frag_data[l] = min_def(m % unival_max, fp_unival_max[l]); m /= unival_max; frag_buf[frag_buf_pos + l] = (char)('0' + vec_frag_data[l]); } if (!bin || !bin->binary_format || !bin->length - || !shader_load_binary_shader(bin, &shaders[k].program, vert_buf, frag_buf)) { + || !shader_load_binary_shader(bin, &programs[k], vert_buf, frag_buf)) { bool vert_succ = shader::parse_define(vert_data, num_uniform, vec_vert_data, &temp_vert, &temp_vert_size); bool frag_succ = shader::parse_define(frag_data, num_uniform, vec_frag_data, &temp_frag, &temp_frag_size); if (ignore_cache) - shaders[k].program = shader_compile(vert_succ ? temp_vert : 0, + programs[k] = shader_compile(vert_succ ? temp_vert : 0, frag_succ ? temp_frag : 0, vert_buf, frag_buf); else { program_data_binary.push_back({}); - shaders[k].program = shader_compile_binary(vert_succ ? temp_vert : 0, + programs[k] = shader_compile_binary(vert_succ ? temp_vert : 0, frag_succ ? temp_frag : 0, vert_buf, frag_buf, &program_data_binary.back(), &buffer_size, &binary); } - shader_cache_changed |= shaders[k].program ? true : false; + shader_cache_changed |= programs[k] ? true : false; } else { program_data_binary.push_back({}); @@ -636,10 +614,6 @@ void shader_set_data::load(farc* f, bool ignore_cache, memcpy((void*)b->binary, (void*)((size_t)bin + bin->binary), bin->length); } - shaders[k].has_uniform_val = false; - if (shaders[k].program) - shaders[k].has_uniform_val = glGetUniformLocation(shaders[k].program, "uniform_val") >= 0; - if (!ignore_cache && bin) bin++; } @@ -647,29 +621,29 @@ void shader_set_data::load(farc* f, bool ignore_cache, } else { program_data_binary.reserve(1); - shader_sub_shader* shaders = force_malloc(); - sub->shaders = shaders; - if (shaders) { + GLuint* programs = force_malloc(); + sub->programs = programs; + if (programs) { strcpy_s(vert_buf, sizeof(vert_buf), sub_table->vp); strcpy_s(frag_buf, sizeof(vert_buf), sub_table->fp); strcat_s(vert_buf, sizeof(vert_buf), "..vert"); strcat_s(frag_buf, sizeof(vert_buf), "..frag"); if (!bin || !bin->binary_format || !bin->length - || !shader_load_binary_shader(bin, &shaders[0].program, vert_buf, frag_buf)) { + || !shader_load_binary_shader(bin, &programs[0], vert_buf, frag_buf)) { bool vert_succ = shader::parse_define(vert_data, &temp_vert, &temp_vert_size); bool frag_succ = shader::parse_define(frag_data, &temp_frag, &temp_frag_size); if (ignore_cache) - shaders[0].program = shader_compile(vert_succ ? temp_vert : 0, + programs[0] = shader_compile(vert_succ ? temp_vert : 0, frag_succ ? temp_frag : 0, vert_buf, frag_buf); else { program_data_binary.push_back({}); - shaders[0].program = shader_compile_binary(vert_succ ? temp_vert : 0, + programs[0] = shader_compile_binary(vert_succ ? temp_vert : 0, frag_succ ? temp_frag : 0, vert_buf, frag_buf, &program_data_binary.back(), &buffer_size, &binary); } - shader_cache_changed |= shaders[0].program ? true : false; + shader_cache_changed |= programs[0] ? true : false; } else { program_data_binary.push_back({}); @@ -680,10 +654,6 @@ void shader_set_data::load(farc* f, bool ignore_cache, memcpy((void*)b->binary, (void*)((size_t)bin + bin->binary), bin->length); } - shaders[0].has_uniform_val = false; - if (shaders[0].program) - shaders[0].has_uniform_val = glGetUniformLocation(shaders[0].program, "uniform_val") >= 0; - if (!ignore_cache && bin) bin++; } @@ -779,19 +749,18 @@ void shader_set_data::unload() { const int32_t* vp_unival_max = sub->vp_unival_max; const int32_t* fp_unival_max = sub->fp_unival_max; for (int32_t k = 0; k < num_uniform; k++) { - const int32_t unival_max = shader->use_uniform[k].second - ? max_def(vp_unival_max[k], fp_unival_max[k]) : 0; + const int32_t unival_max = max_def(vp_unival_max[k], fp_unival_max[k]); unival_shad_count += unival_shad_curr * unival_max; unival_shad_curr *= unival_max + 1; } } - if (sub->shaders) { - shader_sub_shader* shaders = sub->shaders; + if (sub->programs) { + GLuint* programs = sub->programs; for (int32_t k = 0; k < unival_shad_count; k++) - glDeleteProgram(shaders[k].program); - free(shaders); - sub->shaders = 0; + glDeleteProgram(programs[k]); + free(programs); + sub->programs = 0; } } free(shader->sub); @@ -887,7 +856,7 @@ static GLuint shader_compile(const char* vert, const char* frag, const char* vp, wchar_t temp_buf[MAX_PATH]; if (SUCCEEDED(SHGetFolderPathW(0, CSIDL_LOCAL_APPDATA, 0, 0, temp_buf))) { - wcscat_s(temp_buf, sizeof(temp_buf) / sizeof(wchar_t), L"\\ReDIVA"); + wcscat_s(temp_buf, sizeof(temp_buf) / sizeof(wchar_t), L"\\PDAFT"); temp_buf[sizeof(temp_buf) / sizeof(wchar_t) - 1] = 0; path_create_directory(temp_buf); @@ -961,7 +930,7 @@ static GLuint shader_compile_binary(const char* vert, const char* frag, const ch wchar_t temp_buf[MAX_PATH]; if (SUCCEEDED(SHGetFolderPathW(0, CSIDL_LOCAL_APPDATA, 0, 0, temp_buf))) { - wcscat_s(temp_buf, sizeof(temp_buf) / sizeof(wchar_t), L"\\ReDIVA"); + wcscat_s(temp_buf, sizeof(temp_buf) / sizeof(wchar_t), L"\\PDAFT"); temp_buf[sizeof(temp_buf) / sizeof(wchar_t) - 1] = 0; path_create_directory(temp_buf); @@ -1045,14 +1014,6 @@ static void shader_update_data(shader_set_data* set) { if (!set) return; - if (set->curr_shader) { - shader_sub_shader* shader = set->curr_shader; - if (shader->has_uniform_val && shader->uniform_val_update) { - glUniform1iv(0, SHADER_MAX_UNIFORM_VALUES, (GLint*)shader->uniform_val); - shader->uniform_val_update = false; - } - } - if (set->primitive_restart) { gl_state_enable_primitive_restart(); gl_state_set_primitive_restart_index(set->primitive_restart_index); diff --git a/src/DivaGL/shader.hpp b/src/DivaGL/shader.hpp index a6c275b..cf2cae2 100644 --- a/src/DivaGL/shader.hpp +++ b/src/DivaGL/shader.hpp @@ -30,7 +30,7 @@ struct shader_table { int32_t num_sub; const shader_sub_table* sub; int32_t num_uniform; - const std::pair* use_uniform; + const uniform_name* use_uniform; }; struct shader; @@ -45,18 +45,11 @@ struct shader_bind_func { PFNSHADERBINDFUNCPROC bind_func; }; -struct shader_sub_shader { - GLuint program; - bool has_uniform_val; - int32_t uniform_val[SHADER_MAX_UNIFORM_VALUES]; - bool uniform_val_update; -}; - struct shader_sub { uint32_t sub_index; const int32_t* vp_unival_max; const int32_t* fp_unival_max; - shader_sub_shader* shaders; + GLuint* programs; }; struct shader { @@ -65,7 +58,7 @@ struct shader { int32_t num_sub; shader_sub* sub; int32_t num_uniform; - const std::pair* use_uniform; + const uniform_name* use_uniform; PFNSHADERBINDFUNCPROC bind_func; int32_t bind(shader_set_data* set, uint32_t sub_index); @@ -80,7 +73,7 @@ struct shader { struct shader_set_data { size_t size; shader* shaders; - shader_sub_shader* curr_shader; + GLuint curr_program; GLboolean primitive_restart; GLuint primitive_restart_index; diff --git a/src/DivaGL/shader_ft.cpp b/src/DivaGL/shader_ft.cpp index ed9d865..0abcad9 100644 --- a/src/DivaGL/shader_ft.cpp +++ b/src/DivaGL/shader_ft.cpp @@ -17,26 +17,18 @@ enum shader_ft_sub_enum { SHADER_FT_SUB_STAGE_BLINN, SHADER_FT_SUB_SKIN_DEFAULT, SHADER_FT_SUB_SSS_SKIN, - //SHADER_FT_SUB_SSS_FILTER, SHADER_FT_SUB_SSS_FILTER_MIN, SHADER_FT_SUB_SSS_FILTER_MIN_NPR, SHADER_FT_SUB_SSS_FILTER_GAUSS_2D, SHADER_FT_SUB_HAIR_DEFAULT, - //SHADER_FT_SUB_HAIR_ANISO, SHADER_FT_SUB_HAIR_NPR1, SHADER_FT_SUB_CLOTH_DEFAULT, SHADER_FT_SUB_CLOTH_ANISO, SHADER_FT_SUB_CLOTH_NPR1, SHADER_FT_SUB_TIGHTS, SHADER_FT_SUB_SKY_DEFAULT, - //SHADER_FT_SUB_EYE_BALL, - //SHADER_FT_SUB_EYE_LENS, SHADER_FT_SUB_GLASS_EYE, - //SHADER_FT_SUB_MEMBRANE, - //SHADER_FT_SUB_SHADOWMAP, - //SHADER_FT_SUB_ESM, SHADER_FT_SUB_ESM_GAUSS, - //SHADER_FT_SUB_ESM_FILTER, SHADER_FT_SUB_ESM_FILTER_MIN, SHADER_FT_SUB_ESM_FILTER_EROSION, SHADER_FT_SUB_LIT_PROJ, @@ -44,10 +36,8 @@ enum shader_ft_sub_enum { SHADER_FT_SUB_SILHOUETTE, SHADER_FT_SUB_LAMBERT, SHADER_FT_SUB_CONSTANT, - //SHADER_FT_SUB_PEEL, SHADER_FT_SUB_TONEMAP, SHADER_FT_SUB_TONEMAP_NPR1, - //SHADER_FT_SUB_REDUCE_TEX, SHADER_FT_SUB_GHOST, SHADER_FT_SUB_REDUCE_TEX_REDUCE_2, SHADER_FT_SUB_REDUCE_TEX_REDUCE_2_ALPHAMASK, @@ -56,58 +46,42 @@ enum shader_ft_sub_enum { SHADER_FT_SUB_REDUCE_TEX_REDUCE_COMPOSITE_2, SHADER_FT_SUB_REDUCE_TEX_REDUCE_COMPOSITE_BLUR, SHADER_FT_SUB_REDUCE_TEX_REDUCE_COMPOSITE_4, - //SHADER_FT_SUB_MAGNIFY, SHADER_FT_SUB_MAGNIFY_CONE, SHADER_FT_SUB_MAGNIFY_CONE2, SHADER_FT_SUB_MAGNIFY_DIFF, SHADER_FT_SUB_MAGNIFY_DIFF2, SHADER_FT_SUB_MAGNIFY_LINEAR, - //SHADER_FT_SUB_MLAA, SHADER_FT_SUB_MLAA_EDGE, SHADER_FT_SUB_MLAA_AREA, SHADER_FT_SUB_MLAA_BLEND, SHADER_FT_SUB_CONTOUR, SHADER_FT_SUB_CONTOUR_NPR, - //SHADER_FT_SUB_EXPOSURE, SHADER_FT_SUB_EXPOSURE_MINIFY, SHADER_FT_SUB_EXPOSURE_MEASURE, SHADER_FT_SUB_EXPOSURE_AVERAGE, - //SHADER_FT_SUB_PP_GAUSS, SHADER_FT_SUB_PP_GAUSS_USUAL, SHADER_FT_SUB_PP_GAUSS_CONE, SHADER_FT_SUB_SUN, SHADER_FT_SUB_SUN_NO_TEXTURED, - //SHADER_FT_SUB_FADE, SHADER_FT_SUB_WATER01, - //SHADER_FT_SUB_WATER02, - //SHADER_FT_SUB_WATER_RING, SHADER_FT_SUB_WATER_PARTICLE, - //SHADER_FT_SUB_SNOW_PARTICLE, SHADER_FT_SUB_SNOW_PARTICLE, SHADER_FT_SUB_SNOW_PARTICLE_CPU, SHADER_FT_SUB_LEAF_PARTICLE, SHADER_FT_SUB_STAR, SHADER_FT_SUB_STAR_MILKY_WAY, - //SHADER_FT_SUB_SNOW_RING, - //SHADER_FT_SUB_SNOW_FOOTPRINT, - //SHADER_FT_SUB_SNOW_TEX_SPACE_LIGHT, - //SHADER_FT_SUB_SNOW_CALC_NORMAL, SHADER_FT_SUB_FLOOR, SHADER_FT_SUB_PUDDLE, SHADER_FT_SUB_SIMPLE_REFLECT, SHADER_FT_SUB_SIMPLE_REFRACT, SHADER_FT_SUB_RIPPLE_EMIT, SHADER_FT_SUB_RAIN, - //SHADER_FT_SUB_VOLUME_LIGHT, - //SHADER_FT_SUB_FENCE_ALPHA, SHADER_FT_SUB_RIPPLE, SHADER_FT_SUB_FOG_PTCL, SHADER_FT_SUB_PARTICLE, SHADER_FT_SUB_GLITTER_PARTICLE, - //SHADER_FT_SUB_SHOW_VECTOR, SHADER_FT_SUB_FONT, SHADER_FT_SUB_MOVIE, - //SHADER_FT_SUB_IMGFILTER, SHADER_FT_SUB_BOX4, SHADER_FT_SUB_BOX8, SHADER_FT_SUB_COPY, @@ -116,517 +90,343 @@ enum shader_ft_sub_enum { }; static const int32_t blinn_vert_vpt_unival_max[] = { - //1, 1, 0, 1, 0, 0, 0, 3, 1, 1, 0, 0, // 11th added - 1, 0, 1, 0, 0, 0, 3, 1, 1, 0, 0, // 0th removed, 11th added -}; - -static const int32_t blinn_vert_fpt_unival_max[] = { - //0, 0, 2, 1, 0, 1, 1, 3, 0, 0, 1, 1, // 11th added - 0, 2, 1, 0, 1, 1, 3, 0, 0, 1, 1, // 0th removed, 11th added -}; - -static const int32_t blinn_frag_vpt_unival_max[] = { - //1, 1, 0, 1, 0, 0, 0, 3, 1, 1, 0, 0, // 11th added - 1, 0, 1, 0, 0, 0, 3, 1, 1, 0, 0, // 0th removed, 11th added -}; - -static const int32_t blinn_frag_fpt_unival_max[] = { - //0, 0, 2, 1, 1, 1, 1, 3, 0, 0, 1, 1, // 11th added - 0, 2, 1, 1, 1, 1, 3, 0, 0, 1, 1, // 0th removed, 11th added -}; - -static const int32_t item_blinn_vpt_unival_max[] = { - //1, 1, 1, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, - 1, 1, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, // 0th removed -}; - -static const int32_t item_blinn_fpt_unival_max[] = { - //1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, - 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, // 0th removed -}; - -static const int32_t stage_blinn_vpt_unival_max[] = { - //1, 1, 1, 1, 0, 0, 1, 0, 3, 0, 0, 0, // 11th added - 1, 1, 1, 0, 0, 1, 0, 3, 0, 0, 0, // 0th removed, 11th added -}; - -static const int32_t stage_blinn_fpt_unival_max[] = { - //0, 0, 0, 0, 2, 1, 1, 1, 3, 1, 1, 1, // 11th added - 0, 0, 0, 2, 1, 1, 1, 3, 1, 1, 1, // 0th removed, 11th added -}; - -static const int32_t skin_default_vpt_unival_max[] = { - //1, 1, 1, 0, 2, 0, 1, 0, 0, 0, - 1, 1, 0, 2, 0, 1, 0, 0, 0, // 0th removed -}; - -static const int32_t skin_default_fpt_unival_max[] = { - //1, 0, 1, 1, 0, 1, 0, 1, 1, 1, - 0, 1, 1, 0, 1, 0, 1, 1, 1, // 0th removed -}; - -static const int32_t sss_skin_vpt_unival_max[] = { - //1, 1, 0, 0, 0, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, // 0th removed -}; - -static const int32_t sss_skin_fpt_unival_max[] = { - //1, 0, 1, 1, 1, 0, 1, 1, - 0, 1, 1, 1, 0, 1, 1, // 0th removed -}; - -/*static const int32_t sss_filter_vpt_unival_max[] = { - //0, 3, 0, - 3, 0, // 0th removed -}; - -static const int32_t sss_filter_fpt_unival_max[] = { - //1, 3, 1, - 3, 1, // 0th removed -};*/ - -static const int32_t sss_filter_min_vpt_unival_max[] = { - //0, 0, 0, - 0, 0, // 0th removed -}; - -static const int32_t sss_filter_min_fpt_unival_max[] = { - //0, 0, 0, - 0, 0, // 0th removed -}; - -static const int32_t sss_filter_min_npr_vpt_unival_max[] = { - //0, 0, 0, - 0, 0, // 0th removed -}; - -static const int32_t sss_filter_min_npr_fpt_unival_max[] = { - //0, 0, 0, - 0, 0, // 0th removed -}; - -static const int32_t sss_filter_gauss_2d_vpt_unival_max[] = { - //0, 0, 0, - 0, 0, // 0th removed -}; - -static const int32_t sss_filter_gauss_2d_fpt_unival_max[] = { - //1, 0, 0, - 0, 0, // 0th removed -}; - -/*static const int32_t hair_default_vpt_unival_max[] = { - //1, 1, 0, 0, 1, 0, 0, 3, 0, 2, 1, 0, 0, 0, 0, // 14th added - 1, 0, 0, 1, 0, 0, 3, 0, 2, 1, 0, 0, 0, 0, // 0th removed, 14th added -}; - -static const int32_t hair_default_fpt_unival_max[] = { - //1, 0, 2, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, // 14th added - 0, 2, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, // 0th removed, 14th added -}; - -static const int32_t hair_aniso_vpt_unival_max[] = { - //1, 1, 0, 0, 1, 0, 0, 3, 0, 2, 1, 0, 0, 0, 0, // 14th added - 1, 0, 0, 1, 0, 0, 3, 0, 2, 1, 0, 0, 0, 0, // 0th removed, 14th added -}; - -static const int32_t hair_aniso_fpt_unival_max[] = { - //1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, // 14th added - 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, // 0th removed, 14th added -};*/ - -static const int32_t hair_default_vpt_unival_max[] = { - //1, 1, 0, 0, 1, 0, 0, 3, 0, 2, 1, 0, 0, 0, 0, // 14th added - 1, 0, 0, 1, 0, 0, 3, 0, 2, 1, 0, 0, 0, 0, // 0th removed, 14th added -}; - -static const int32_t hair_default_fpt_unival_max[] = { - //1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, // 14th added - 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, // 0th removed, 14th added -}; - -static const int32_t hair_npr1_vpt_unival_max[] = { - //1, 1, 0, 0, 1, 0, 0, 3, 0, 2, 1, 0, 0, 0, 0, // 14th added - 1, 0, 0, 1, 0, 0, 3, 0, 2, 1, 0, 0, 0, 0, // 0th removed, 14th added -}; - -static const int32_t hair_npr1_fpt_unival_max[] = { - //1, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, 0, 0, 0, 1, // 14th added - 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, 0, 0, 0, 1, // 0th removed, 14th added -}; - -static const int32_t cloth_default_vpt_unival_max[] = { - //1, 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, // 0th removed -}; - -static const int32_t cloth_default_fpt_unival_max[] = { - //1, 0, 2, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, - 0, 2, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, // 0th removed -}; - -static const int32_t cloth_aniso_vpt_unival_max[] = { - //1, 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, // 0th removed -}; - -static const int32_t cloth_aniso_fpt_unival_max[] = { - //1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 3, 0, 0, 1, 1, - 0, 0, 1, 0, 1, 1, 1, 0, 1, 3, 0, 0, 1, 1, // 0th removed -}; - -static const int32_t cloth_npr1_vpt_unival_max[] = { - //1, 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, // 0th removed -}; - -static const int32_t cloth_npr1_fpt_unival_max[] = { - //1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, // 0th removed -}; - -static const int32_t tights_vpt_unival_max[] = { - //1, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, // 0th removed -}; - -static const int32_t tights_fpt_unival_max[] = { - //1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, - 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, // 0th removed -}; - -static const int32_t sky_default_vpt_unival_max[] = { - 0, 0, 0, 1, 1, 3, 0, // 6th added -}; - -static const int32_t sky_default_fpt_unival_max[] = { - 3, 3, 2, 0, 0, 3, 1, // 6th added -}; - -/*static const int32_t eye_ball_vpt_unival_max[] = { - 1, 0, -}; - -static const int32_t eye_ball_fpt_unival_max[] = { - 0, 1, -};*/ - -/*static const int32_t eye_lens_vpt_unival_max[] = { - 1, 0, 0, -}; - -static const int32_t eye_lens_fpt_unival_max[] = { - 0, 1, 1, -};*/ - -static const int32_t glass_eye_vpt_unival_max[] = { - //1, 1, 0, 2, 0, 1, 0, 0, - 1, 0, 2, 0, 1, 0, 0, // 0th removed -}; - -static const int32_t glass_eye_fpt_unival_max[] = { - //1, 1, 1, 0, 1, 0, 1, 1, - 1, 1, 0, 1, 0, 1, 1, // 0th removed -}; - -/*static const int32_t membrane_vpt_unival_max[] = { 1, 1, 0, }; -static const int32_t membrane_fpt_unival_max[] = { - 0, 1, 3, -};*/ - -/*static const int32_t shadowmap_vpt_unival_max[] = { - 1, 2, 1, 0, 0, +static const int32_t blinn_vert_fpt_unival_max[] = { + 0, 0, 1, }; -static const int32_t shadowmap_fpt_unival_max[] = { - 0, 2, 1, 1, 5, -};*/ - -/*static const int32_t esm_vpt_unival_max[] = { - //1, 1, 2, 1, - 1, 2, 1, // 0th removed +static const int32_t blinn_frag_vpt_unival_max[] = { + 1, 1, 0, }; -static const int32_t esm_fpt_unival_max[] = { - //0, 0, 2, 1, - 0, 2, 1, // 0th removed -};*/ - -static const int32_t esm_gauss_vpt_unival_max[] = { - 0, +static const int32_t blinn_frag_fpt_unival_max[] = { + 0, 0, 1, }; -static const int32_t esm_gauss_fpt_unival_max[] = { - 1, +static const int32_t item_blinn_vpt_unival_max[] = { + 1, 1, 0, }; -/*static const int32_t esm_filter_vpt_unival_max[] = { - 0, +static const int32_t item_blinn_fpt_unival_max[] = { + 0, 0, 1, }; -static const int32_t esm_filter_fpt_unival_max[] = { - 1, -};*/ - -static const int32_t esm_filter_min_vpt_unival_max[] = { - 0, +static const int32_t stage_blinn_vpt_unival_max[] = { + 1, 1, 0, }; -static const int32_t esm_filter_min_fpt_unival_max[] = { - 0, +static const int32_t stage_blinn_fpt_unival_max[] = { + 0, 0, 1, }; -static const int32_t esm_filter_erosion_vpt_unival_max[] = { - 0, +static const int32_t skin_default_vpt_unival_max[] = { + 1, 0, }; -static const int32_t esm_filter_erosion_fpt_unival_max[] = { - 0, -}; - -static const int32_t lit_proj_vpt_unival_max[] = { - //1, 1, 0, 1, 0, 0, 0, // 6th added - 1, 0, 1, 0, 0, 0, // 0th removed, 6th added -}; - -static const int32_t lit_proj_fpt_unival_max[] = { - //0, 0, 1, 1, 2, 1, 1, // 6th added - 0, 1, 1, 2, 1, 1, // 0th removed, 6th added -}; - -static const int32_t simple_vpt_unival_max[] = { - //1, 1, 0, 0, 1, 0, - 1, 0, // 0th removed, 3rd removed, 4th removed, 5th removed -}; - -static const int32_t simple_fpt_unival_max[] = { - //0, 0, 2, 0, 0, 3, - 0, 2, // 0th removed, 3rd removed, 4th removed, 5th removed -}; - -static const int32_t silhouette_vpt_unival_max[] = { - //1, 1, 1, 2, 1, 1, 0, 0, // 7th added - 1, 1, 2, 1, 1, 0, 0, // 0th removed, 7th added -}; - -static const int32_t silhouette_fpt_unival_max[] = { - //0, 0, 1, 0, 0, 0, 1, 1, // 7th added - 0, 1, 0, 0, 0, 1, 1, // 0th removed, 7th added -}; - -static const int32_t lambert_vpt_unival_max[] = { - //1, 1, 0, 1, 3, 1, 1, 0, 0, // 8th added - 1, 0, 1, 3, 1, 1, 0, 0, // 0th removed, 8th added -}; - -static const int32_t lambert_fpt_unival_max[] = { - //0, 0, 2, 1, 3, 0, 0, 1, 1, // 8th added - 0, 2, 1, 3, 0, 0, 1, 1, // 0th removed, 8th added -}; - -static const int32_t constant_vpt_unival_max[] = { - //1, 1, 0, 3, 1, 1, 0, // 6th added - 1, 0, 3, 1, 1, 0, // 0th removed, 6th added -}; - -static const int32_t constant_fpt_unival_max[] = { - //0, 0, 2, 3, 0, 0, 1, // 6th added - 0, 2, 3, 0, 0, 1, // 0th removed, 6th added -}; - -/*static const int32_t peel_vpt_unival_max[] = { +static const int32_t skin_default_fpt_unival_max[] = { 0, 1, }; -static const int32_t peel_fpt_unival_max[] = { +static const int32_t sss_skin_vpt_unival_max[] = { 1, 0, -};*/ +}; + +static const int32_t sss_skin_fpt_unival_max[] = { + 0, 1, +}; + +static const int32_t sss_filter_min_vpt_unival_max[] = { + -1, +}; + +static const int32_t sss_filter_min_fpt_unival_max[] = { + -1, +}; + +static const int32_t sss_filter_min_npr_vpt_unival_max[] = { + -1, +}; + +static const int32_t sss_filter_min_npr_fpt_unival_max[] = { + -1, +}; + +static const int32_t sss_filter_gauss_2d_vpt_unival_max[] = { + -1, +}; + +static const int32_t sss_filter_gauss_2d_fpt_unival_max[] = { + -1, +}; + +static const int32_t hair_default_vpt_unival_max[] = { + 1, 0, +}; + +static const int32_t hair_default_fpt_unival_max[] = { + 0, 1, +}; + +static const int32_t hair_npr1_fpt_unival_max[] = { + 0, 1, +}; + +static const int32_t cloth_default_vpt_unival_max[] = { + 1, 0, +}; + +static const int32_t cloth_default_fpt_unival_max[] = { + 0, 1, +}; + +static const int32_t cloth_aniso_fpt_unival_max[] = { + 0, 1, +}; + +static const int32_t cloth_npr1_fpt_unival_max[] = { + 0, 1, +}; + +static const int32_t tights_vpt_unival_max[] = { + 1, 0, +}; + +static const int32_t tights_fpt_unival_max[] = { + 0, 1, +}; + +static const int32_t sky_default_vpt_unival_max[] = { + 1, 0, +}; + +static const int32_t sky_default_fpt_unival_max[] = { + 0, 1, +}; + +static const int32_t glass_eye_vpt_unival_max[] = { + 1, +}; + +static const int32_t glass_eye_fpt_unival_max[] = { + 0, +}; + +static const int32_t esm_gauss_vpt_unival_max[] = { + -1, +}; + +static const int32_t esm_gauss_fpt_unival_max[] = { + -1, +}; + +static const int32_t esm_filter_min_vpt_unival_max[] = { + -1, +}; + +static const int32_t esm_filter_min_fpt_unival_max[] = { + -1, +}; + +static const int32_t esm_filter_erosion_vpt_unival_max[] = { + -1, +}; + +static const int32_t esm_filter_erosion_fpt_unival_max[] = { + -1, +}; + +static const int32_t lit_proj_vpt_unival_max[] = { + 1, 0, +}; + +static const int32_t lit_proj_fpt_unival_max[] = { + 0, 1, +}; + +static const int32_t simple_vpt_unival_max[] = { + 1, +}; + +static const int32_t simple_fpt_unival_max[] = { + 0, +}; + +static const int32_t silhouette_vpt_unival_max[] = { + 1, 1, +}; + +static const int32_t silhouette_fpt_unival_max[] = { + 0, 0, +}; + +static const int32_t lambert_vpt_unival_max[] = { + 1, 1, 0, +}; + +static const int32_t lambert_fpt_unival_max[] = { + 0, 0, 1, +}; + +static const int32_t constant_vpt_unival_max[] = { + 1, 1, 0, +}; + +static const int32_t constant_fpt_unival_max[] = { + 0, 0, 1, +}; static const int32_t tone_map_vpt_unival_max[] = { - //0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 1, 0, 0, // 0th, 7th removed + 0, 1, }; static const int32_t tone_map_fpt_unival_max[] = { - //0, 2, 2, 1, 1, 1, 0, 0, - 2, 2, 1, 1, 1, 0, // 0th, 7th removed + 2, 1, }; static const int32_t tone_map_npr1_vpt_unival_max[] = { - //0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 1, 0, 0, // 0th, 7th removed + 0, 1, }; static const int32_t tone_map_npr1_fpt_unival_max[] = { - //1, 0, 0, 1, 1, 0, 0, 1, - 0, 0, 1, 1, 0, 0, // 0th, 7th removed + 0, 1, }; -/*static const int32_t reduce_tex_vpt_unival_max[] = { - 8, 1, -}; - -static const int32_t reduce_tex_fpt_unival_max[] = { - 8, 1, -};*/ - static const int32_t reduce_tex_reduce_2_vpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_2_fpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_2_alphamask_vpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_2_alphamask_fpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_4_vpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_4_fpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_4_extract_vpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_4_extract_fpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t ghost_vpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t ghost_fpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_composite_2_vpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_composite_2_fpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_composite_blur_vpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_composite_blur_fpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_composite_4_vpt_unival_max[] = { - 0, 0, + -1, }; static const int32_t reduce_tex_reduce_composite_4_fpt_unival_max[] = { - 0, 0, + -1, }; -/*static const int32_t magnify_vpt_unival_max[] = { - 7, -}; - -static const int32_t magnify_fpt_unival_max[] = { - 7, -};*/ - static const int32_t magnify_linear_vpt_unival_max[] = { - 0, + -1, }; static const int32_t magnify_linear_fpt_unival_max[] = { - 0, + -1, }; static const int32_t magnify_diff_vpt_unival_max[] = { - 0, + -1, }; static const int32_t magnify_diff_fpt_unival_max[] = { - 0, + -1, }; static const int32_t magnify_diff2_vpt_unival_max[] = { - 0, + -1, }; static const int32_t magnify_diff2_fpt_unival_max[] = { - 0, + -1, }; static const int32_t magnify_cone_vpt_unival_max[] = { - 0, + -1, }; static const int32_t magnify_cone_fpt_unival_max[] = { - 0, + -1, }; static const int32_t magnify_cone2_vpt_unival_max[] = { - 0, + -1, }; static const int32_t magnify_cone2_fpt_unival_max[] = { - 0, + -1, }; -/*static const int32_t mlaa_vpt_unival_max[] = { - //0, 0, 2, 0, - 0, 2, 0, // 0th removed -}; - -static const int32_t mlaa_fpt_unival_max[] = { - //1, 1, 2, 2, - 1, 2, 2, // 0th removed -};*/ - static const int32_t mlaa_edge_vpt_unival_max[] = { - 0, 0, 0, + 0, 0, }; static const int32_t mlaa_edge_fpt_unival_max[] = { - 1, 0, 0, + 1, 0, }; static const int32_t mlaa_area_vpt_unival_max[] = { - 0, 0, 0, + 0, 0, }; static const int32_t mlaa_area_fpt_unival_max[] = { - 0, 0, 2, + 0, 2, }; static const int32_t mlaa_blend_vpt_unival_max[] = { - 0, 0, 0, + 0, 0, }; static const int32_t mlaa_blend_fpt_unival_max[] = { - 1, 0, 0, + 1, 0, }; static const int32_t contour_vpt_unival_max[] = { - //0, 1, - 1, // 0th removed + -1, }; static const int32_t contour_fpt_unival_max[] = { - //1, 1, - 1, // 0th removed + -1, }; static const int32_t contour_npr_vpt_unival_max[] = { @@ -637,60 +437,44 @@ static const int32_t contour_npr_fpt_unival_max[] = { -1, }; -/*static const int32_t exposure_vpt_unival_max[] = { - 2, -}; - -static const int32_t exposure_fpt_unival_max[] = { - 2, -};*/ - static const int32_t exposure_minify_vpt_unival_max[] = { - 0, + -1, }; static const int32_t exposure_minify_fpt_unival_max[] = { - 0, + -1, }; static const int32_t exposure_measure_vpt_unival_max[] = { - 0, + -1, }; static const int32_t exposure_measure_fpt_unival_max[] = { - 0, + -1, }; static const int32_t exposure_average_vpt_unival_max[] = { - 0, + -1, }; static const int32_t exposure_average_fpt_unival_max[] = { - 0, + -1, }; -/*static const int32_t pp_gauss_vpt_unival_max[] = { - 1, -}; - -static const int32_t pp_gauss_fpt_unival_max[] = { - 1, -};*/ - static const int32_t pp_gauss_usual_vpt_unival_max[] = { - 0, + -1, }; static const int32_t pp_gauss_usual_fpt_unival_max[] = { - 0, + -1, }; static const int32_t pp_gauss_cone_vpt_unival_max[] = { - 0, + -1, }; static const int32_t pp_gauss_cone_fpt_unival_max[] = { - 0, + -1, }; static const int32_t sun_vpt_unival_max[] = { @@ -709,38 +493,14 @@ static const int32_t sun_no_textured_fpt_unival_max[] = { -1, }; -/*static const int32_t fade_vpt_unival_max[] = { - 5, -}; - -static const int32_t fade_fpt_unival_max[] = { - 5, -};*/ - static const int32_t water01_vpt_unival_max[] = { - 1, 1, 0, 0, 0, 0, 0, 1, + 1, }; static const int32_t water01_fpt_unival_max[] = { - 0, 0, 2, 1, 1, 1, 1, 1, + 0, }; -/*static const int32_t water02_vpt_unival_max[] = { - -1, -}; - -static const int32_t water02_fpt_unival_max[] = { - -1, -};*/ - -/*static const int32_t water_ring_vpt_unival_max[] = { - 1, 0, -}; - -static const int32_t water_ring_fpt_unival_max[] = { - 1, 1, -};*/ - static const int32_t water_particle_vpt_unival_max[] = { -1, }; @@ -749,28 +509,20 @@ static const int32_t water_particle_fpt_unival_max[] = { -1, }; -/*static const int32_t snow_particle_vpt_unival_max[] = { - 1, -}; - -static const int32_t snow_particle_fpt_unival_max[] = { - 1, -};*/ - static const int32_t snow_particle_vpt_unival_max[] = { - 0, + -1, }; static const int32_t snow_particle_fpt_unival_max[] = { - 0, + -1, }; static const int32_t snow_particle_cpu_vpt_unival_max[] = { - 0, + -1, }; static const int32_t snow_particle_cpu_fpt_unival_max[] = { - 0, + -1, }; static const int32_t leaf_particle_vpt_unival_max[] = { @@ -781,94 +533,52 @@ static const int32_t leaf_particle_fpt_unival_max[] = { -1, }; -/*static const int32_t star_vpt_unival_max[] = { - 1, -}; - -static const int32_t star_fpt_unival_max[] = { - 1, -};*/ - static const int32_t star_vpt_unival_max[] = { - 0, + -1, }; static const int32_t star_fpt_unival_max[] = { - 0, + -1, }; static const int32_t star_milky_way_vpt_unival_max[] = { - 0, + -1, }; static const int32_t star_milky_way_fpt_unival_max[] = { - 0, -}; - -static const int32_t snow_ring_vpt_unival_max[] = { - 0, 0, 0, 1, 0, -}; - -static const int32_t snow_ring_fpt_unival_max[] = { - 2, 1, 1, 1, 1, -}; - -static const int32_t snow_footprint_vpt_unival_max[] = { - -1, -}; - -static const int32_t snow_footprint_fpt_unival_max[] = { - -1, -}; - -static const int32_t snow_tex_space_light_vpt_unival_max[] = { - -1, -}; - -static const int32_t snow_tex_space_light_fpt_unival_max[] = { - -1, -}; - -static const int32_t snow_calc_normal_vpt_unival_max[] = { - -1, -}; - -static const int32_t snow_calc_normal_fpt_unival_max[] = { -1, }; static const int32_t floor_vpt_unival_max[] = { - 0, 0, 1, 0, 3, 1, 1, 0, + 0, 0, }; static const int32_t floor_fpt_unival_max[] = { - 2, 1, 1, 1, 3, 0, 0, 1, // 7th added + 1, 1, }; static const int32_t puddle_vpt_unival_max[] = { - 0, 1, 0, 3, + -1, }; static const int32_t puddle_fpt_unival_max[] = { - 1, 1, 1, 3, + -1, }; static const int32_t simple_reflect_vpt_unival_max[] = { - //1, 1, 2, 1, 1, 0, 0, 0, 0, 0, - 1, 2, 1, 1, 0, 0, 0, 0, 0, // 0th removed + 1, 1, 0, }; static const int32_t simple_reflect_fpt_unival_max[] = { - //0, 0, 2, 0, 0, 1, 1, 2, 1, 1, - 0, 2, 0, 0, 1, 1, 2, 1, 1, // 0th removed + 0, 0, 1, }; static const int32_t simple_refract_vpt_unival_max[] = { - 1, 0, + 1, }; static const int32_t simple_refract_fpt_unival_max[] = { - 0, 1, + 0, }; static const int32_t ripple_emit_vpt_unival_max[] = { @@ -887,22 +597,6 @@ static const int32_t rain_fpt_unival_max[] = { -1, }; -/*static const int32_t volume_light_vpt_unival_max[] = { - -1, -}; - -static const int32_t volume_light_fpt_unival_max[] = { - -1, -};*/ - -/*static const int32_t fence_alpha_vpt_unival_max[] = { - 1, 3, -}; - -static const int32_t fence_alpha_fpt_unival_max[] = { - 0, 3, -};*/ - static const int32_t ripple_vpt_unival_max[] = { 0, }; @@ -928,31 +622,19 @@ static const int32_t particle_fpt_unival_max[] = { }; static const int32_t glitter_particle_vpt_unival_max[] = { - 2, 0, 3, 0, + -1, }; static const int32_t glitter_particle_fpt_unival_max[] = { - 2, 3, 3, 3, + -1, }; -/*static const int32_t show_vector_vpt_unival_max[] = { - //1, 1, 3, - 1, 3, // 0th removed -}; - -static const int32_t show_vector_fpt_unival_max[] = { - //0, 0, 0, - 0, 0, // 0th removed -};*/ - static const int32_t font_vpt_unival_max[] = { - //0, - -1, // 0th removed, 1st added + -1, }; static const int32_t font_fpt_unival_max[] = { - //1, - -1, // 0th removed, 1st added + -1, }; static const int32_t movie_vpt_unival_max[] = { @@ -963,37 +645,30 @@ static const int32_t movie_fpt_unival_max[] = { 1, }; -/*static const int32_t imgfilter_vpt_unival_max[] = { - 0, -}; - -static const int32_t imgfilter_fpt_unival_max[] = { - 5, -};*/ - static const int32_t box4_vpt_unival_max[] = { - 0, + -1, }; static const int32_t box4_fpt_unival_max[] = { - 0, + -1, }; static const int32_t box8_vpt_unival_max[] = { - 0, + -1, }; static const int32_t box8_fpt_unival_max[] = { - 0, + -1, }; static const int32_t copy_vpt_unival_max[] = { - 0, + -1, }; static const int32_t copy_fpt_unival_max[] = { - 0, + -1, }; + static const int32_t sprite_vpt_unival_max[] = { 0, 0, 0, }; @@ -1059,16 +734,6 @@ static const shader_sub_table SSS_SKIN_table[] = { }, }; -/*static const shader_sub_table SSS_FILT_table[] = { - { - SHADER_FT_SUB_SSS_FILTER, - sss_filter_vpt_unival_max, - sss_filter_fpt_unival_max, - "sss_filter", - "sss_filter", - }, -};*/ - static const shader_sub_table SSS_FILT_table[] = { { SHADER_FT_SUB_SSS_FILTER_MIN, @@ -1093,30 +758,6 @@ static const shader_sub_table SSS_FILT_table[] = { }, }; -/*static const shader_sub_table HAIR_table[] = { - { - SHADER_FT_SUB_HAIR_DEFAULT, - hair_default_vpt_unival_max, - hair_default_fpt_unival_max, - "hair_default", - "hair_default", - }, - { - SHADER_FT_SUB_HAIR_ANISO, - hair_aniso_vpt_unival_max, - hair_aniso_fpt_unival_max, - "hair_default", - "hair_aniso", - }, - { - SHADER_FT_SUB_HAIR_NPR1, - hair_npr1_vpt_unival_max, - hair_npr1_fpt_unival_max, - "hair_default", - "hair_npr1", - }, -};*/ - static const shader_sub_table HAIR_table[] = { { SHADER_FT_SUB_HAIR_DEFAULT, @@ -1127,7 +768,7 @@ static const shader_sub_table HAIR_table[] = { }, { SHADER_FT_SUB_HAIR_NPR1, - hair_npr1_vpt_unival_max, + hair_default_vpt_unival_max, hair_npr1_fpt_unival_max, "hair_default", "hair_npr1", @@ -1144,14 +785,14 @@ static const shader_sub_table CLOTH_table[] = { }, { SHADER_FT_SUB_CLOTH_ANISO, - cloth_aniso_vpt_unival_max, + cloth_default_vpt_unival_max, cloth_aniso_fpt_unival_max, "cloth_default", "cloth_aniso", }, { SHADER_FT_SUB_CLOTH_NPR1, - cloth_npr1_vpt_unival_max, + cloth_default_vpt_unival_max, cloth_npr1_fpt_unival_max, "cloth_default", "cloth_npr1", @@ -1178,26 +819,6 @@ static const shader_sub_table SKY_table[] = { }, }; -/*static const shader_sub_table EYEBALL_table[] = { - { - SHADER_FT_SUB_EYE_BALL, - eye_ball_vpt_unival_max, - eye_ball_fpt_unival_max, - "eye_ball", - "eye_ball", - }, -};*/ - -/*static const shader_sub_table EYELENS_table[] = { - { - SHADER_FT_SUB_EYE_LENS, - eye_lens_vpt_unival_max, - eye_lens_fpt_unival_max, - "eye_lens", - "eye_lens", - }, -};*/ - static const shader_sub_table GLASEYE_table[] = { { SHADER_FT_SUB_GLASS_EYE, @@ -1208,36 +829,6 @@ static const shader_sub_table GLASEYE_table[] = { }, }; -/*static const shader_sub_table MEMBRAN_table[] = { - { - SHADER_FT_SUB_MEMBRANE, - membrane_vpt_unival_max, - membrane_fpt_unival_max, - "membrane", - "membrane", - }, -};*/ - -/*static const shader_sub_table SHDMAP_table[] = { - { - SHADER_FT_SUB_SHADOWMAP, - shadowmap_vpt_unival_max, - shadowmap_fpt_unival_max, - "shadowmap", - "shadowmap", - }, -};*/ - -/*static const shader_sub_table ESM_table[] = { - { - SHADER_FT_SUB_ESM, - esm_vpt_unival_max, - esm_fpt_unival_max, - "esm", - "esm", - }, -};*/ - static const shader_sub_table ESMGAUSS_table[] = { { SHADER_FT_SUB_ESM_GAUSS, @@ -1248,16 +839,6 @@ static const shader_sub_table ESMGAUSS_table[] = { }, }; -/*static const shader_sub_table ESMFILT_table[] = { - { - SHADER_FT_SUB_ESM_FILTER, - esm_filter_vpt_unival_max, - esm_filter_fpt_unival_max, - "esm_filter", - "esm_filter", - }, -};*/ - static const shader_sub_table ESMFILT_table[] = { { SHADER_FT_SUB_ESM_FILTER_MIN, @@ -1325,16 +906,6 @@ static const shader_sub_table CONSTANT_table[] = { }, }; -/*static const shader_sub_table PEEL_table[] = { - { - SHADER_FT_SUB_PEEL, - peel_vpt_unival_max, - peel_fpt_unival_max, - "depth_peel", - "depth_peel", - }, -};*/ - static const shader_sub_table TONEMAP_table[] = { { SHADER_FT_SUB_TONEMAP, @@ -1352,16 +923,6 @@ static const shader_sub_table TONEMAP_table[] = { }, }; -/*static const shader_sub_table REDUCE_table[] = { - { - SHADER_FT_SUB_REDUCE_TEX, - reduce_tex_vpt_unival_max, - reduce_tex_fpt_unival_max, - "reduce_tex", - "reduce_tex", - }, -};*/ - static const shader_sub_table REDUCE_table[] = { { SHADER_FT_SUB_REDUCE_TEX_REDUCE_2, @@ -1421,16 +982,6 @@ static const shader_sub_table REDUCE_table[] = { }, }; -/*static const shader_sub_table MAGNIFY_table[] = { - { - SHADER_FT_SUB_MAGNIFY, - magnify_vpt_unival_max, - magnify_fpt_unival_max, - "magnify", - "magnify", - }, -};*/ - static const shader_sub_table MAGNIFY_table[] = { { SHADER_FT_SUB_MAGNIFY_LINEAR, @@ -1469,16 +1020,6 @@ static const shader_sub_table MAGNIFY_table[] = { }, }; -/*static const shader_sub_table MLAA_table[] = { - { - SHADER_FT_SUB_MLAA, - mlaa_vpt_unival_max, - mlaa_fpt_unival_max, - "mlaa", - "mlaa", - }, -};*/ - static const shader_sub_table MLAA_table[] = { { SHADER_FT_SUB_MLAA_EDGE, @@ -1523,16 +1064,6 @@ static const shader_sub_table CONTOUR_NPR_table[] = { }, }; -/*static const shader_sub_table EXPOSURE_table[] = { - { - SHADER_FT_SUB_EXPOSURE, - exposure_vpt_unival_max, - exposure_fpt_unival_max, - "exposure", - "exposure", - }, -};*/ - static const shader_sub_table EXPOSURE_table[] = { { SHADER_FT_SUB_EXPOSURE_MINIFY, @@ -1557,16 +1088,6 @@ static const shader_sub_table EXPOSURE_table[] = { }, }; -/*static const shader_sub_table GAUSS_table[] = { - { - SHADER_FT_SUB_PP_GAUSS, - pp_gauss_vpt_unival_max, - pp_gauss_fpt_unival_max, - "pp_gauss", - "pp_gauss", - }, -};*/ - static const shader_sub_table GAUSS_table[] = { { SHADER_FT_SUB_PP_GAUSS_USUAL, @@ -1604,16 +1125,6 @@ static const shader_sub_table SUN_NO_TEXTURED_table[] = { }, }; -/*static const shader_sub_table FADE_table[] = { - { - SHADER_FT_SUB_FADE, - fade_vpt_unival_max, - fade_fpt_unival_max, - "fade", - "fade", - }, -};*/ - static const shader_sub_table WATER01_table[] = { { SHADER_FT_SUB_WATER01, @@ -1624,26 +1135,6 @@ static const shader_sub_table WATER01_table[] = { }, }; -/*static const shader_sub_table WATER02_table[] = { - { - SHADER_FT_SUB_WATER02, - water02_vpt_unival_max, - water02_fpt_unival_max, - "water02", - "water02", - }, -};*/ - -/*static const shader_sub_table WATRING_table[] = { - { - SHADER_FT_SUB_WATER_RING, - water_ring_vpt_unival_max, - water_ring_fpt_unival_max, - "water_ring", - "water_ring", - }, -};*/ - static const shader_sub_table W_PTCL_table[] = { { SHADER_FT_SUB_WATER_PARTICLE, @@ -1654,16 +1145,6 @@ static const shader_sub_table W_PTCL_table[] = { }, }; -/*static const shader_sub_table SNOW_PT_table[] = { - { - SHADER_FT_SUB_SNOW_PARTICLE, - snow_particle_vpt_unival_max, - snow_particle_fpt_unival_max, - "snow_particle", - "snow_particle", - }, -};*/ - static const shader_sub_table SNOW_PT_table[] = { { SHADER_FT_SUB_SNOW_PARTICLE, @@ -1708,46 +1189,6 @@ static const shader_sub_table STAR_table[] = { }, }; -/*static const shader_sub_table SNORING_table[] = { - { - SHADER_FT_SUB_SNOW_RING, - snow_ring_vpt_unival_max, - snow_ring_fpt_unival_max, - "snow_ring", - "snow_ring", - }, -}; - -static const shader_sub_table SN_FOOT_table[] = { - { - SHADER_FT_SUB_SNOW_FOOTPRINT, - snow_footprint_vpt_unival_max, - snow_footprint_fpt_unival_max, - "snow_footprint", - "snow_footprint", - }, -}; - -static const shader_sub_table SN_TSL_table[] = { - { - SHADER_FT_SUB_SNOW_TEX_SPACE_LIGHT, - snow_tex_space_light_vpt_unival_max, - snow_tex_space_light_fpt_unival_max, - "snow_tex_space_light", - "snow_tex_space_light", - }, -}; - -static const shader_sub_table SN_NRM_table[] = { - { - SHADER_FT_SUB_SNOW_CALC_NORMAL, - snow_calc_normal_vpt_unival_max, - snow_calc_normal_fpt_unival_max, - "snow_calc_normal", - "snow_calc_normal", - }, -};*/ - static const shader_sub_table FLOOR_table[] = { { SHADER_FT_SUB_FLOOR, @@ -1808,26 +1249,6 @@ static const shader_sub_table RAIN_table[] = { }, }; -/*static const shader_sub_table VOLLIT_table[] = { - { - SHADER_FT_SUB_VOLUME_LIGHT, - volume_light_vpt_unival_max, - volume_light_fpt_unival_max, - "volume_light", - "volume_light", - }, -};*/ - -/*static const shader_sub_table FENCE_table[] = { - { - SHADER_FT_SUB_FENCE_ALPHA, - fence_alpha_vpt_unival_max, - fence_alpha_fpt_unival_max, - "fence_alpha", - "fence_alpha", - }, -};*/ - static const shader_sub_table RIPPLE_table[] = { { SHADER_FT_SUB_RIPPLE, @@ -1868,16 +1289,6 @@ static const shader_sub_table GLITTER_PT_table[] = { }, }; -/*static const shader_sub_table SHOW_VEC_table[] = { - { - SHADER_FT_SUB_SHOW_VECTOR, - show_vector_vpt_unival_max, - show_vector_fpt_unival_max, - "show_vector", - "show_vector", - }, -};*/ - static const shader_sub_table FONT_table[] = { { SHADER_FT_SUB_FONT, @@ -1898,16 +1309,6 @@ static const shader_sub_table MOVIE_table[] = { }, }; -/*static const shader_sub_table IMGFILT_table[] = { - { - SHADER_FT_SUB_IMGFILTER, - imgfilter_vpt_unival_max, - imgfilter_fpt_unival_max, - "imgfilter", - "imgfilter", - }, -};*/ - static const shader_sub_table IMGFILT_table[] = { { SHADER_FT_SUB_BOX4, @@ -1942,459 +1343,218 @@ static const shader_sub_table SPRITE_table[] = { }, }; -static const std::pair BLINN_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_TEXTURE_COUNT, false }, - { U_LIGHT_0 , false }, - { U_NORMAL , false }, - { U_SPECULAR , false }, - { U_ENV_MAP , false }, - { U_FOG_HEIGHT , false }, - { U_MORPH , true }, - { U_MORPH_COLOR , true }, - { U_LIGHT_1 , false }, - { U_ALPHA_TEST , true }, // 11th added +static const uniform_name BLINN_uniform[] = { + U_SKINNING, + U_MORPH, + U_ALPHA_TEST, }; -static const std::pair ITEM_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_MORPH , true }, - { U_SPECULAR_IBL , false }, - { U_SPECULAR , false }, - { U_NORMAL , false }, - { U_TEXTURE_COUNT, false }, - { U_ENV_MAP , false }, - { U_SELF_SHADOW , true }, - { U_FOG , false }, - { U_ALPHA_TEST , true }, - { U_SHADOW , false }, - { U_CHARA_COLOR , false }, - { U_TONE_CURVE , false }, +static const uniform_name ITEM_uniform[] = { + U_SKINNING, + U_MORPH, + U_ALPHA_TEST, }; -static const std::pair STAGE_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_MORPH , true }, - { U_MORPH_COLOR , true }, - { U_TEXTURE_COUNT, false }, - { U_ENV_MAP , false }, - { U_LIGHT_0 , false }, - { U_NORMAL , false }, - { U_FOG_HEIGHT , false }, - { U_LIGHT_1 , false }, - { U_STAGE_AMBIENT, false }, - { U_ALPHA_TEST , true }, // 11th added +static const uniform_name STAGE_uniform[] = { + U_SKINNING, + U_MORPH, + U_ALPHA_TEST, }; -static const std::pair SKIN_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_NORMAL , false }, - { U_SELF_SHADOW , true }, - { U_FOG , false }, - { U_ALPHA_TEST , true }, - { U_SHADOW , false }, - { U_NPR , true }, - { U_CHARA_COLOR , false }, - { U_TONE_CURVE , false }, +static const uniform_name SKIN_uniform[] = { + U_SKINNING, + U_ALPHA_TEST, }; -static const std::pair SSS_SKIN_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_SSS_CHARA , true }, - { U_ALPHA_TEST , true }, - { U_SELF_SHADOW , true }, - { U_SHADOW , false }, - { U_NPR , true }, - { U_NPR_NORMAL , false }, +static const uniform_name SSS_SKIN_uniform[] = { + U_SKINNING, + U_ALPHA_TEST, }; -static const std::pair SSS_FILT_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SSS_FILTER , true }, - { U_NPR , true }, +static const uniform_name SSS_FILT_uniform[] = { + U_INVALID, }; -static const std::pair HAIR_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_SPECULAR_IBL , false }, - { U_SPECULAR , false }, - { U_NORMAL , false }, - { U_TRANSPARENCY , false }, - { U_TRANSLUCENCY , false }, - { U_ANISO , false }, - { U_SELF_SHADOW , true }, - { U_FOG , false }, - { U_SHADOW , false }, - { U_NPR , false }, - { U_CHARA_COLOR , false }, - { U_TONE_CURVE , false }, - { U_ALPHA_TEST , true }, // 14th added +static const uniform_name HAIR_uniform[] = { + U_SKINNING, + U_ALPHA_TEST, }; -static const std::pair CLOTH_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_SPECULAR_IBL , false }, - { U_SPECULAR , false }, - { U_NORMAL , false }, - { U_TRANSPARENCY , false }, - { U_ENV_MAP , false }, - { U_SELF_SHADOW , true }, - { U_FOG , false }, - { U_ALPHA_TEST , true }, - { U_ANISO , false }, - { U_SHADOW , false }, - { U_NPR , false }, - { U_CHARA_COLOR , false }, - { U_TONE_CURVE , false }, +static const uniform_name CLOTH_uniform[] = { + U_SKINNING, + U_ALPHA_TEST, }; -static const std::pair TIGHTS_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_SPECULAR , false }, - { U_ENV_MAP , false }, - { U_SELF_SHADOW , true }, - { U_FOG , false }, - { U_ALPHA_TEST , true }, - { U_SHADOW , false }, - { U_NPR , false }, - { U_CHARA_COLOR , false }, - { U_TONE_CURVE , false }, +static const uniform_name TIGHTS_uniform[] = { + U_SKINNING, + U_ALPHA_TEST, }; -static const std::pair SKY_uniform[] = { - { U_TEX_0_TYPE , false }, - { U_TEX_1_TYPE , false }, - { U_TEXTURE_COUNT, false }, - { U_MORPH , true }, - { U_MORPH_COLOR , true }, - { U_FOG_HEIGHT , false }, - { U_ALPHA_TEST , true }, // 6th added +static const uniform_name SKY_uniform[] = { + U_MORPH, + U_ALPHA_TEST, }; -/*static const std::pair EYEBALL_uniform[] = { - { U_SKINNING , true }, - { U_ENV_MAP , false }, -};*/ - -/*static const std::pair EYELENS_uniform[] = { - { U_SKINNING , true }, - { U_SPECULAR , false }, - { U_ENV_MAP , false }, -};*/ - -static const std::pair GLASEYE_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_SELF_SHADOW , true }, - { U_FOG , false }, - { U_EYEBALL , false }, - { U_SHADOW , false }, - { U_CHARA_COLOR , false }, - { U_TONE_CURVE , false }, +static const uniform_name GLASEYE_uniform[] = { + U_SKINNING, }; -/*static const std::pair MEMBRAN_uniform[] = { - { U_SKINNING , true }, - { U_NORMAL , false }, - { U_MEMBRANE , false }, -};*/ - -/*static const std::pair SHDMAP_uniform[] = { - { U_SKINNING , true }, - { U_TEXTURE_COUNT, false }, - { U_TRANSPARENCY , false }, - { U_LIGHT_1 , false }, - { U2D , true }, -};*/ - -/*static const std::pair ESM_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_TEXTURE_COUNT, false }, - { U_TRANSPARENCY , false }, -};*/ - -static const std::pair ESMGAUSS_uniform[] = { - { U_LIGHT_PROJ , true }, +static const uniform_name ESMGAUSS_uniform[] = { + U_INVALID, }; -static const std::pair ESMFILT_uniform[] = { - { U_ESM_FILTER , true }, +static const uniform_name ESMFILT_uniform[] = { + U_INVALID, }; -static const std::pair LITPROJ_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_SPECULAR , false }, - { U_NORMAL , false }, - { U_TEXTURE_COUNT, false }, - { U_TRANSPARENCY , false }, - { U_ALPHA_TEST , true }, // 6th added +static const uniform_name LITPROJ_uniform[] = { + U_SKINNING, + U_ALPHA_TEST, }; -static const std::pair SIMPLE_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_TEXTURE_COUNT, false }, - //{ U_NORMAL , false }, // 3rd removed - //{ U_INSTANCE , false }, // 4th removed - //{ U2E , false }, // 5th removed +static const uniform_name SIMPLE_uniform[] = { + U_SKINNING, }; -static const std::pair SIL_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_TRANSPARENCY , false }, - { U_TEXTURE_COUNT, false }, - { U_MORPH , true }, - { U_MORPH_COLOR , true }, - { U_DEPTH , true }, - { U_ALPHA_TEST , true }, // 7th added +static const uniform_name SIL_uniform[] = { + U_SKINNING, + U_MORPH, }; -static const std::pair LAMBERT_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_TEXTURE_COUNT, false }, - { U_LIGHT_0 , false }, - { U_FOG_HEIGHT , false }, - { U_MORPH , true }, - { U_MORPH_COLOR , true }, - { U_LIGHT_1 , false }, - { U_ALPHA_TEST , true }, // 8th added +static const uniform_name LAMBERT_uniform[] = { + U_SKINNING, + U_MORPH, + U_ALPHA_TEST, }; -static const std::pair CONSTANT_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_TEXTURE_COUNT, false }, - { U_FOG_HEIGHT , false }, - { U_MORPH , true }, - { U_MORPH_COLOR , true }, - { U_ALPHA_TEST , true }, // 6th added +static const uniform_name CONSTANT_uniform[] = { + U_SKINNING, + U_MORPH, + U_ALPHA_TEST, }; -/*static const std::pair PEEL_uniform[] = { - { U_DEPTH_PEEL , false }, - { U_SKINNING , true }, -};*/ - -static const std::pair TONEMAP_uniform[] = { - //{ U16 , true }, // 0th removed - { U_TONE_MAP , false }, - { U_FLARE , false }, - { U_SCENE_FADE , false }, - { U_AET_BACK , false }, - { U_LIGHT_PROJ , false }, - { U_NPR , false }, - //{ U25 , false }, 7th removed +static const uniform_name TONEMAP_uniform[] = { + U_TONE_MAP, + U_AET_BACK, }; -static const std::pair REDUCE_uniform[] = { - { U_REDUCE , true }, - { U_ALPHA_MASK , true }, +static const uniform_name REDUCE_uniform[] = { + U_INVALID, }; -static const std::pair MAGNIFY_uniform[] = { - { U_MAGNIFY , true }, +static const uniform_name MAGNIFY_uniform[] = { + U_INVALID, }; -static const std::pair MLAA_uniform[] = { - //{ U16 , true }, // 0th removed - { U_ALPHA_MASK , true }, - { U_MLAA , true }, - { U_MLAA_SEARCH , true }, +static const uniform_name MLAA_uniform[] = { + U_ALPHA_MASK, + U_MLAA_SEARCH, }; -static const std::pair CONTOUR_uniform[] = { - //{ U16 , true }, // 0th removed - { U24 , false }, +static const uniform_name CONTOUR_uniform[] = { + U_INVALID, }; -static const std::pair CONTOUR_NPR_uniform[] = { - { U_INVALID , false }, +static const uniform_name CONTOUR_NPR_uniform[] = { + U_INVALID, }; -static const std::pair EXPOSURE_uniform[] = { - { U_EXPOSURE , true }, +static const uniform_name EXPOSURE_uniform[] = { + U_INVALID, }; -static const std::pair GAUSS_uniform[] = { - { U_GAUSS , true }, +static const uniform_name GAUSS_uniform[] = { + U_INVALID, }; -static const std::pair SUN_uniform[] = { - { U_INVALID , false }, +static const uniform_name SUN_uniform[] = { + U_INVALID, }; -static const std::pair SUN_NO_TEXTURED_uniform[] = { - { U_INVALID , false }, +static const uniform_name SUN_NO_TEXTURED_uniform[] = { + U_INVALID, }; -/*static const std::pair FADE_uniform[] = { - { U_FADE , false }, -};*/ - -static const std::pair WATER01_uniform[] = { - { U_MORPH , true }, - { U_MORPH_COLOR , true }, - { U_TEXTURE_COUNT, false }, - { U_NORMAL , false }, - { U_WATER_REFLECT, false }, - { U_ENV_MAP , false }, - { U_SPECULAR , false }, - { U_FOG_HEIGHT , false }, +static const uniform_name WATER01_uniform[] = { + U_MORPH, }; -/*static const std::pair WATER02_uniform[] = { - { U_INVALID , false }, -};*/ - -/*static const std::pair WATRING_uniform[] = { - { U_LIGHT_0 , false }, - { U_LIGHT_1 , false }, -};*/ - -static const std::pair W_PTCL_uniform[] = { - { U_INVALID , false }, +static const uniform_name W_PTCL_uniform[] = { + U_INVALID, }; -static const std::pair SNOW_PT_uniform[] = { - { U_SNOW_PARTICLE, false }, +static const uniform_name SNOW_PT_uniform[] = { + U_INVALID, }; -static const std::pair LEAF_PT_uniform[] = { - { U_INVALID , false }, +static const uniform_name LEAF_PT_uniform[] = { + U_INVALID, }; -static const std::pair STAR_uniform[] = { - { U_STAR , false }, +static const uniform_name STAR_uniform[] = { + U_INVALID, }; -/*static const std::pair SNORING_uniform[] = { - { U_TEXTURE_COUNT, false }, - { U_NORMAL , false }, - { U_SPECULAR , false }, - { U_LIGHT_0 , false }, - { U_LIGHT_1 , false }, +static const uniform_name FLOOR_uniform[] = { + U_MORPH, + U_ALPHA_TEST, }; -static const std::pair SN_FOOT_uniform[] = { - { U_INVALID , false }, +static const uniform_name PUDDLE_uniform[] = { + U_INVALID, }; -static const std::pair SN_TSL_uniform[] = { - { U_INVALID , false }, +static const uniform_name S_REFL_uniform[] = { + U_SKINNING, + U_MORPH, + U_ALPHA_TEST, }; -static const std::pair SN_NRM_uniform[] = { - { U_INVALID , false }, -};*/ - -static const std::pair FLOOR_uniform[] = { - { U_TEXTURE_COUNT, false }, - { U_NORMAL , false }, - { U_LIGHT_0 , false }, - { U_LIGHT_1 , false }, - { U_FOG_HEIGHT , false }, - { U_MORPH , true }, - { U_MORPH_COLOR , true }, - { U_ALPHA_TEST , true }, // 7th added +static const uniform_name S_REFR_uniform[] = { + U_SKINNING, }; -static const std::pair PUDDLE_uniform[] = { - { U_NORMAL , false }, - { U_LIGHT_0 , false }, - { U_LIGHT_1 , false }, - { U_FOG_HEIGHT , false }, +static const uniform_name RIPEMIT_uniform[] = { + U_RIPPLE, + U_RIPPLE_EMIT, }; -static const std::pair S_REFL_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_REFLECT , true }, - { U_MORPH , true }, - { U_MORPH_COLOR , true }, - { U_ALPHA_TEST , true }, - { U_CLIP_PLANE , false }, - { U_TEXTURE_COUNT, false }, - { U_TONE_CURVE , false }, - { U_CHARA_COLOR , false }, +static const uniform_name RAIN_uniform[] = { + U_INVALID, }; -static const std::pair S_REFR_uniform[] = { - { U_SKINNING , true }, - { U_TRANSPARENCY , false }, +static const uniform_name RIPPLE_uniform[] = { + U_RIPPLE, }; -static const std::pair RIPEMIT_uniform[] = { - { U_RIPPLE , true }, - { U_RIPPLE_EMIT , true }, +static const uniform_name FOGPTCL_uniform[] = { + U_INVALID, }; -static const std::pair RAIN_uniform[] = { - { U_INVALID , false }, +static const uniform_name PARTICL_uniform[] = { + U_INVALID, }; -/*static const std::pair VOLLIT_uniform[] = { - { U_INVALID , false }, -};*/ - -/*static const std::pair FENCE_uniform[] = { - { U_INSTANCE , false }, - { U_FOG_HEIGHT , false }, -};*/ - -static const std::pair RIPPLE_uniform[] = { - { U_RIPPLE , true }, +static const uniform_name GLITTER_PT_uniform[] = { + U_INVALID, }; -static const std::pair FOGPTCL_uniform[] = { - { U_INVALID , false }, +static const uniform_name FONT_uniform[] = { + U_INVALID, }; -static const std::pair PARTICL_uniform[] = { - { U_INVALID , false }, +static const uniform_name MOVIE_uniform[] = { + U_MOVIE, }; -static const std::pair GLITTER_PT_uniform[] = { - { U_TEXTURE_COUNT, false }, - { U_TEXTURE_BLEND, false }, - { U_FOG_HEIGHT , false }, - { U_ALPHA_BLEND , false }, +static const uniform_name IMGFILT_uniform[] = { + U_INVALID, }; -/*static const std::pair SHOW_VEC_uniform[] = { - //{ U16 , true }, // 0th removed - { U_SKINNING , true }, - { U_SHOW_VECTOR , false }, -};*/ - -static const std::pair FONT_uniform[] = { - //{ U16 , true }, // 0th removed - { U_INVALID , false }, // 1st added -}; - -static const std::pair MOVIE_uniform[] = { - { U_MOVIE , true }, -}; - -static const std::pair IMGFILT_uniform[] = { - { U_IMAGE_FILTER , false }, -}; - -static const std::pair SPRITE_uniform[] = { - { U_TEX_0_TYPE , false }, - { U_TEX_1_TYPE , false }, - { U_COMBINER , false }, +static const uniform_name SPRITE_uniform[] = { + U_TEX_0_TYPE, + U_TEX_1_TYPE, + U_COMBINER, }; struct glass_eye_struct { @@ -2432,7 +1592,7 @@ struct glass_eye_struct { SHADER_FT_##n, \ sizeof(n##_table) / sizeof(shader_sub_table), \ n##_table, \ - sizeof(n##_uniform) / sizeof(std::pair), \ + n##_uniform[0] > 0 ? sizeof(n##_uniform) / sizeof(uniform_name) : 0, \ n##_uniform, \ } @@ -2455,12 +1615,7 @@ const shader_table shader_ft_table[] = { shader_table_struct(CLOTH), shader_table_struct(TIGHTS), shader_table_struct(SKY), - //shader_table_struct(EYEBALL), - //shader_table_struct(EYELENS), shader_table_struct(GLASEYE), - //shader_table_struct(MEMBRAN), - //shader_table_struct(SHDMAP), - //shader_table_struct(ESM), shader_table_struct(ESMGAUSS), shader_table_struct(ESMFILT), shader_table_struct(LITPROJ), @@ -2468,7 +1623,6 @@ const shader_table shader_ft_table[] = { shader_table_struct(SIL), shader_table_struct(LAMBERT), shader_table_struct(CONSTANT), - //shader_table_struct(PEEL), shader_table_struct(TONEMAP), shader_table_struct(REDUCE), shader_table_struct(MAGNIFY), @@ -2479,31 +1633,21 @@ const shader_table shader_ft_table[] = { shader_table_struct(GAUSS), shader_table_struct(SUN), shader_table_struct(SUN_NO_TEXTURED), - //shader_table_struct(FADE), shader_table_struct(WATER01), - //shader_table_struct(WATER02), - //shader_table_struct(WATRING), shader_table_struct(W_PTCL), shader_table_struct(SNOW_PT), shader_table_struct(LEAF_PT), shader_table_struct(STAR), - /*shader_table_struct(SNORING), - shader_table_struct(SN_FOOT), - shader_table_struct(SN_TSL), - shader_table_struct(SN_NRM),*/ shader_table_struct(FLOOR), shader_table_struct(PUDDLE), shader_table_struct(S_REFL), shader_table_struct(S_REFR), shader_table_struct(RIPEMIT), shader_table_struct(RAIN), - //shader_table_struct(VOLLIT), - //shader_table_struct(FENCE), shader_table_struct(RIPPLE), shader_table_struct(FOGPTCL), shader_table_struct(PARTICL), shader_table_struct(GLITTER_PT), - //shader_table_struct(SHOW_VEC), shader_table_struct(FONT), shader_table_struct(MOVIE), shader_table_struct(IMGFILT), @@ -2520,18 +1664,18 @@ static void glass_eye_set(glass_eye_struct* glass_eye); static void shader_bind_blinn(shader_set_data* set, shader* shad); static void shader_bind_cloth(shader_set_data* set, shader* shad); static void shader_bind_hair(shader_set_data* set, shader* shad); -static void shader_bind_eye_ball(shader_set_data* set, shader* shad); +static void shader_bind_glass_eye(shader_set_data* set, shader* shad); static void shader_bind_tone_map(shader_set_data* set, shader* shad); -static void shader_bind_sss_filter(shader_set_data* set, shader* shad); // Added -static void shader_bind_esm_filter(shader_set_data* set, shader* shad); // Added -static void shader_bind_reduce_tex(shader_set_data* set, shader* shad); // Added -static void shader_bind_magnify(shader_set_data* set, shader* shad); // Added -static void shader_bind_mlaa(shader_set_data* set, shader* shad); // Added -static void shader_bind_exposure(shader_set_data* set, shader* shad); // Added -static void shader_bind_gauss(shader_set_data* set, shader* shad); // Added -static void shader_bind_snow_particle(shader_set_data* set, shader* shad); // Added -static void shader_bind_star(shader_set_data* set, shader* shad); // Added -static void shader_bind_imgfilter(shader_set_data* set, shader* shad); // Added +static void shader_bind_sss_filter(shader_set_data* set, shader* shad); +static void shader_bind_esm_filter(shader_set_data* set, shader* shad); +static void shader_bind_reduce_tex(shader_set_data* set, shader* shad); +static void shader_bind_magnify(shader_set_data* set, shader* shad); +static void shader_bind_mlaa(shader_set_data* set, shader* shad); +static void shader_bind_exposure(shader_set_data* set, shader* shad); +static void shader_bind_gauss(shader_set_data* set, shader* shad); +static void shader_bind_snow_particle(shader_set_data* set, shader* shad); +static void shader_bind_star(shader_set_data* set, shader* shad); +static void shader_bind_imgfilter(shader_set_data* set, shader* shad); const shader_bind_func shader_ft_bind_func_table[] = { { @@ -2547,51 +1691,50 @@ const shader_bind_func shader_ft_bind_func_table[] = { shader_bind_hair, }, { - //SHADER_FT_EYEBALL, SHADER_FT_GLASEYE, - shader_bind_eye_ball, + shader_bind_glass_eye, }, { SHADER_FT_TONEMAP, shader_bind_tone_map, }, - { // Added + { SHADER_FT_SSS_FILT, shader_bind_sss_filter, }, - { // Added + { SHADER_FT_ESMFILT, shader_bind_esm_filter, }, - { // Added + { SHADER_FT_REDUCE, shader_bind_reduce_tex, }, - { // Added + { SHADER_FT_MAGNIFY, shader_bind_magnify, }, - { // Added + { SHADER_FT_MLAA, shader_bind_mlaa, }, - { // Added + { SHADER_FT_EXPOSURE, shader_bind_exposure, }, - { // Added + { SHADER_FT_GAUSS, shader_bind_gauss, }, - { // Added + { SHADER_FT_SNOW_PT, shader_bind_snow_particle, }, - { // Added + { SHADER_FT_STAR, shader_bind_star, }, - { // Added + { SHADER_FT_IMGFILT, shader_bind_imgfilter, }, @@ -2725,7 +1868,7 @@ static void glass_eye_set(glass_eye_struct* glass_eye) { glass_eye_batch.g_tex_scale = temp; rctx->glass_eye_batch_ubo.WriteMemory(glass_eye_batch); - rctx->glass_eye_batch_ubo.Bind(4); + rctx->glass_eye_batch_ubo.Bind(5); } static void shader_bind_blinn(shader_set_data* set, shader* shad) { @@ -2742,7 +1885,7 @@ static void shader_bind_hair(shader_set_data* set, shader* shad) { shad->bind(set, uniform->arr[U_NPR] ? SHADER_FT_SUB_HAIR_NPR1 : SHADER_FT_SUB_HAIR_DEFAULT); } -static void shader_bind_eye_ball(shader_set_data* set, shader* shad) { +static void shader_bind_glass_eye(shader_set_data* set, shader* shad) { uniform->arr[U_EYEBALL] = 0; if (set->shaders[SHADER_FT_GLASEYE].bind(set, SHADER_FT_SUB_GLASS_EYE) >= 0) { glass_eye_calc(&glass_eye); @@ -2755,7 +1898,7 @@ static void shader_bind_tone_map(shader_set_data* set, shader* shad) { ? SHADER_FT_SUB_TONEMAP_NPR1 : SHADER_FT_SUB_TONEMAP); } -static void shader_bind_sss_filter(shader_set_data* set, shader* shad) { // Added +static void shader_bind_sss_filter(shader_set_data* set, shader* shad) { switch (uniform->arr[U_SSS_FILTER]) { case 0: shad->bind(set, uniform->arr[U_NPR] @@ -2767,7 +1910,7 @@ static void shader_bind_sss_filter(shader_set_data* set, shader* shad) { // Adde } } -static void shader_bind_esm_filter(shader_set_data* set, shader* shad) { // Added +static void shader_bind_esm_filter(shader_set_data* set, shader* shad) { switch (uniform->arr[U_ESM_FILTER]) { case 0: shad->bind(set, SHADER_FT_SUB_ESM_FILTER_MIN); @@ -2778,7 +1921,7 @@ static void shader_bind_esm_filter(shader_set_data* set, shader* shad) { // Adde } } -static void shader_bind_reduce_tex(shader_set_data* set, shader* shad) { // Added +static void shader_bind_reduce_tex(shader_set_data* set, shader* shad) { switch (uniform->arr[U_REDUCE]) { case 0: switch (uniform->arr[U_ALPHA_MASK]) { @@ -2835,7 +1978,7 @@ static void shader_bind_reduce_tex(shader_set_data* set, shader* shad) { // Adde } } -static void shader_bind_magnify(shader_set_data* set, shader* shad) { // Added +static void shader_bind_magnify(shader_set_data* set, shader* shad) { switch (uniform->arr[U_MAGNIFY]) { case 0: shad->bind(set, SHADER_FT_SUB_MAGNIFY_LINEAR); @@ -2855,7 +1998,7 @@ static void shader_bind_magnify(shader_set_data* set, shader* shad) { // Added } } -static void shader_bind_mlaa(shader_set_data* set, shader* shad) { // Added +static void shader_bind_mlaa(shader_set_data* set, shader* shad) { switch (uniform->arr[U_MLAA]) { case 0: shad->bind(set, SHADER_FT_SUB_MLAA_EDGE); @@ -2869,7 +2012,7 @@ static void shader_bind_mlaa(shader_set_data* set, shader* shad) { // Added } } -static void shader_bind_exposure(shader_set_data* set, shader* shad) { // Added +static void shader_bind_exposure(shader_set_data* set, shader* shad) { switch (uniform->arr[U_EXPOSURE]) { case 0: shad->bind(set, SHADER_FT_SUB_EXPOSURE_MINIFY); @@ -2883,7 +2026,7 @@ static void shader_bind_exposure(shader_set_data* set, shader* shad) { // Added } } -static void shader_bind_gauss(shader_set_data* set, shader* shad) { // Added +static void shader_bind_gauss(shader_set_data* set, shader* shad) { switch (uniform->arr[U_GAUSS]) { case 0: shad->bind(set, SHADER_FT_SUB_PP_GAUSS_USUAL); @@ -2894,7 +2037,7 @@ static void shader_bind_gauss(shader_set_data* set, shader* shad) { // Added } } -static void shader_bind_snow_particle(shader_set_data* set, shader* shad) { // Added +static void shader_bind_snow_particle(shader_set_data* set, shader* shad) { switch (uniform->arr[U_SNOW_PARTICLE]) { case 0: shad->bind(set, SHADER_FT_SUB_SNOW_PARTICLE_CPU); @@ -2905,7 +2048,7 @@ static void shader_bind_snow_particle(shader_set_data* set, shader* shad) { // A } } -static void shader_bind_star(shader_set_data* set, shader* shad) { // Added +static void shader_bind_star(shader_set_data* set, shader* shad) { switch (uniform->arr[U_STAR]) { case 0: shad->bind(set, SHADER_FT_SUB_STAR); diff --git a/src/DivaGL/shader_ft.hpp b/src/DivaGL/shader_ft.hpp index 4b4c41e..dd6592e 100644 --- a/src/DivaGL/shader_ft.hpp +++ b/src/DivaGL/shader_ft.hpp @@ -20,12 +20,7 @@ enum shader_ft_enum { SHADER_FT_CLOTH, SHADER_FT_TIGHTS, SHADER_FT_SKY, - //SHADER_FT_EYEBALL, - //SHADER_FT_EYELENS, SHADER_FT_GLASEYE, - //SHADER_FT_MEMBRAN, - //SHADER_FT_SHDMAP, - //SHADER_FT_ESM, SHADER_FT_ESMGAUSS, SHADER_FT_ESMFILT, SHADER_FT_LITPROJ, @@ -33,7 +28,6 @@ enum shader_ft_enum { SHADER_FT_SIL, SHADER_FT_LAMBERT, SHADER_FT_CONSTANT, - //SHADER_FT_PEEL, SHADER_FT_TONEMAP, SHADER_FT_REDUCE, SHADER_FT_MAGNIFY, @@ -44,31 +38,21 @@ enum shader_ft_enum { SHADER_FT_GAUSS, SHADER_FT_SUN, SHADER_FT_SUN_NO_TEXTURED, - //SHADER_FT_FADE, SHADER_FT_WATER01, - //SHADER_FT_WATER02, - //SHADER_FT_WATRING, SHADER_FT_W_PTCL, SHADER_FT_SNOW_PT, SHADER_FT_LEAF_PT, SHADER_FT_STAR, - //SHADER_FT_SNORING, - //SHADER_FT_SN_FOOT, - //SHADER_FT_SN_TSL, - //SHADER_FT_SN_NRM, SHADER_FT_FLOOR, SHADER_FT_PUDDLE, SHADER_FT_S_REFL, SHADER_FT_S_REFR, SHADER_FT_RIPEMIT, SHADER_FT_RAIN, - //SHADER_FT_VOLLIT, - //SHADER_FT_FENCE, SHADER_FT_RIPPLE, SHADER_FT_FOGPTCL, SHADER_FT_PARTICL, SHADER_FT_GLITTER_PT, - //SHADER_FT_SHOW_VEC, SHADER_FT_FONT, SHADER_FT_MOVIE, SHADER_FT_IMGFILT, diff --git a/src/DivaGL/shadow.cpp b/src/DivaGL/shadow.cpp index bfe96a1..ba1af5b 100644 --- a/src/DivaGL/shadow.cpp +++ b/src/DivaGL/shadow.cpp @@ -17,7 +17,7 @@ void(FASTCALL* shadow_ptr_init)() = (void(FASTCALL*)())0x00000001405E8890; void Shadow::ctrl() { for (int32_t i = 0; i < 2; i++) - light_enable[i] = false; + shadow_enable[i] = false; if (render_manager->shadow) { view_mat[0] = camera_data->view; @@ -35,24 +35,24 @@ void Shadow::ctrl() { for (int32_t i = 0; i < 2; i++) if (disp_manager->get_obj_count((mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_CHARA + i))) - light_enable[i] = true; + shadow_enable[i] = true; } int32_t count = 0; - num_light = 0; + num_shadow = 0; for (int32_t i = 0; i < 2; i++) - if (light_enable[i] && field_1D0[i].size() > 0) { - num_light++; + if (shadow_enable[i] && field_1D0[i].size() > 0) { + num_shadow++; count += (int32_t)field_1D0[i].size(); } else - light_enable[i] = false; + shadow_enable[i] = false; if (count < 3) { for (int32_t i = 0; i < 2; i++) { field_1A8[i] = 0.0f; field_1C8[i] = 0.0f; - if (!light_enable[i] || field_1D0[i].size() < 1) + if (!shadow_enable[i] || field_1D0[i].size() < 1) continue; vec3 v7 = 0.0f; @@ -79,11 +79,11 @@ void Shadow::ctrl() { field_1C8[i] = v15; } - if (num_light > 0) { + if (num_shadow > 0) { vec3 view_point = 0.0f; vec3 interest = 0.0f; for (int32_t i = 0; i < 2; i++) { - if (!light_enable[i]) + if (!shadow_enable[i]) continue; vec3 v11 = field_1A8[i] - direction * field_208; @@ -98,8 +98,8 @@ void Shadow::ctrl() { interest += this->interest[i]; } - view_point_shared = view_point * (1.0f / (float_t)num_light); - interest_shared = interest * (1.0f / (float_t)num_light); + view_point_shared = view_point * (1.0f / (float_t)num_shadow); + interest_shared = interest * (1.0f / (float_t)num_shadow); } float_t v2 = max_def(field_1C8[0], field_1C8[1]); @@ -107,7 +107,7 @@ void Shadow::ctrl() { shadow_range = v2 + 1.2f; field_200[0] = 0; field_200[1] = 1; - if (num_light >= 2) { + if (num_shadow >= 2) { vec3 v12 = field_1A8[0] - interest_shared; vec3 v14 = field_1A8[1] - interest_shared; @@ -146,7 +146,7 @@ void Shadow::ctrl() { for (int32_t i = 0; i < 2; i++) { field_1A8[i] = 0.0f; field_1C8[i] = 0.0; - if (!light_enable[i] || field_1D0[i].size() < 1) + if (!shadow_enable[i] || field_1D0[i].size() < 1) continue; vec3 v22 = 0.0f; @@ -173,9 +173,9 @@ void Shadow::ctrl() { field_1C8[i] = v30; } - if (num_light > 0) { + if (num_shadow > 0) { for (int32_t i = 0; i < 2; i++) { - if (!light_enable[i]) + if (!shadow_enable[i]) continue; vec3 v53 = field_1A8[i] - direction * field_208; @@ -207,12 +207,12 @@ void Shadow::ctrl() { shadow_range = v67 + 1.2f; field_200[0] = 0; field_200[1] = 1; - if (num_light >= 2) { + if (num_shadow >= 2) { float_t v68 = 0.0f; float_t v69 = 0.0f; float_t v70 = 0.0f; for (int32_t i = 0; i < 2; i++) { - if (!light_enable[i]) + if (!shadow_enable[i]) continue; for (vec3& j : field_1D0[i]) { @@ -335,7 +335,7 @@ void Shadow::reset() { field_2DC = 2.0f; field_2E0 = 0.05f; shadow_ambient = 0.4f; - num_light = 0; + num_shadow = 0; direction = vec3(0.0f, -1.0f, -1.0f) * (1.0f / sqrtf(2.0f)); show_texture = false; self_shadow = true; diff --git a/src/DivaGL/shadow.hpp b/src/DivaGL/shadow.hpp index aceb786..e5e93ca 100644 --- a/src/DivaGL/shadow.hpp +++ b/src/DivaGL/shadow.hpp @@ -51,8 +51,8 @@ struct Shadow { float_t field_2E0; float_t shadow_ambient; bool show_texture; - int32_t num_light; - bool light_enable[2]; + int32_t num_shadow; + bool shadow_enable[2]; bool self_shadow; bool blur_filter_enable[2]; bool separate; diff --git a/src/DivaGL/uniform.hpp b/src/DivaGL/uniform.hpp index 5b1ccae..33f80bf 100644 --- a/src/DivaGL/uniform.hpp +++ b/src/DivaGL/uniform.hpp @@ -28,8 +28,8 @@ enum uniform_name { U_FADE = 0x11, U_STAGE_AMBIENT = 0x12, U_FLARE = 0x13, - U_FOG_HEIGHT = 0x14, - U_FOG = 0x15, + U_FOG_STAGE = 0x14, + U_FOG_CHARA = 0x15, U16 = 0x16, U_GAUSS = 0x17, U_EYEBALL = 0x18, @@ -48,11 +48,11 @@ enum uniform_name { U25 = 0x25, U_NPR_NORMAL = 0x26, U_NPR = 0x27, - U_LIGHT_1 = 0x28, + U_STAGE_SHADOW2 = 0x28, U_REFLECT = 0x29, U_REDUCE = 0x2A, - U_SELF_SHADOW = 0x2B, - U_SHADOW = 0x2C, + U_CHARA_SHADOW = 0x2B, + U_CHARA_SHADOW2 = 0x2C, U2D = 0x2D, U2E = 0x2E, U_SHOW_VECTOR = 0x2F, @@ -74,7 +74,7 @@ enum uniform_name { U_WATER_REFLECT = 0x3F, U40 = 0x40, U41 = 0x41, - U_LIGHT_0 = 0x42, + U_STAGE_SHADOW = 0x42, U_SPECULAR = 0x43, U_TONE_MAP = 0x44, U45 = 0x45,