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
+19 -19
View File
@@ -13,7 +13,7 @@ extern render_context* rctx_ptr;
Shadow::Shadow() : curr_render_textures(), shadow_range(), shadow_range_factor(), field_1C0(), field_1C8(),
field_200(), field_208(), near_blur(), blur_filter(), far_blur(), field_2BC(), distance(), field_2C4(),
z_near(), z_far(), field_2D0(), field_2D4(), field_2D8(), field_2DC(), field_2E0(), shadow_ambient(),
show_texture(), num_light(), light_enable(), self_shadow(), blur_filter_enable(), separate() {
show_texture(), num_shadow(), shadow_enable(), self_shadow(), blur_filter_enable(), separate() {
reset();
}
@@ -23,7 +23,7 @@ Shadow::~Shadow() {
void Shadow::ctrl() {
for (int32_t i = 0; i < 2; i++)
light_enable[i] = false;
shadow_enable[i] = false;
if (rctx_ptr->render_manager->shadow) {
view_mat[0] = rctx_ptr->camera->view;
@@ -41,24 +41,24 @@ void Shadow::ctrl() {
for (int32_t i = 0; i < 2; i++)
if (rctx_ptr->disp_manager->get_obj_count((mdl::ObjType)((int32_t)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;
@@ -85,11 +85,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;
@@ -104,8 +104,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]);
@@ -113,7 +113,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;
@@ -152,7 +152,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;
@@ -179,9 +179,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;
@@ -213,12 +213,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]) {
@@ -341,7 +341,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;