Shader: total overhaul of permutations and shader flags

This commit is contained in:
korenkonder
2024-06-25 22:56:58 +03:00
parent a26c8e19ed
commit 83624fa4f8
18 changed files with 751 additions and 1483 deletions
+18 -18
View File
@@ -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;