Shader: total overhaul of permutations and shader flags

This commit is contained in:
korenkonder
2024-06-25 22:47:08 +03:00
parent 737fdd935f
commit 0cd4b4e0c4
18 changed files with 798 additions and 1535 deletions
+79 -1
View File
@@ -50,7 +50,7 @@ void draw_state_stats::reset() {
field_1C = 0;
}
draw_state::draw_state() : wireframe(), wireframe_overlay(), light(), self_shadow(),
draw_state::draw_state() : wireframe(), wireframe_overlay(), shadow(), self_shadow(),
shader_debug_flag(), use_global_material(), fog_height(), ex_data_mat(), field_68() {
shader = true;
shader_index = -1;
@@ -195,6 +195,81 @@ bool light_proj::set_mat(bool set_mat) {
return true;
}
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 = shader_flags[U_DOF]; // Added
g_shader_flags.w.m.dof_stage = 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);
@@ -418,9 +493,11 @@ sprite_width(), sprite_height(), screen_x_offset(), screen_y_offset(), screen_wi
tone_map_ubo.Create(sizeof(tone_map_shader_data));
transparency_batch_ubo.Create(sizeof(transparency_batch_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));
@@ -554,6 +631,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();