diff --git a/src/pc/gfx/gfx_pc.c b/src/pc/gfx/gfx_pc.c index 28b7dd045..8de3d69e7 100644 --- a/src/pc/gfx/gfx_pc.c +++ b/src/pc/gfx/gfx_pc.c @@ -1166,7 +1166,7 @@ static void OPTIMIZE_O3 gfx_sp_tri1(uint8_t vtx1_idx, uint8_t vtx2_idx, uint8_t cm->use_fog = (rdp.other_mode_l >> 30) == G_BL_CLR_FOG; cm->light_map = (rsp.geometry_mode & G_LIGHT_MAP_EXT) == G_LIGHT_MAP_EXT; cm->tex_persp = (rdp.other_mode_h & G_TP_PERSP) == G_TP_PERSP; - cm->world_geometry = gShaderFlagsEnabled && (v1->world_geometry && v2->world_geometry && v3->world_geometry); + cm->world_geometry = (v1->world_geometry && v2->world_geometry && v3->world_geometry); if (cm->texture_edge) { cm->use_alpha = true; @@ -2430,6 +2430,8 @@ void gfx_set_builtin_uniforms(void) { gfx_rapi->set_uniform(NULL, "uAspectRatio", SHADER_UNIFORM_TYPE_FLOAT, &aspectRatio, 1); gfx_rapi->set_uniform(NULL, "uXAdjustRatio", SHADER_UNIFORM_TYPE_FLOAT, &xAdjustRatio, 1); + int shaderFlagEnabled = gShaderFlagsEnabled ? 1 : 0; + gfx_rapi->set_uniform(NULL, "uShaderFlagsEnabled", SHADER_UNIFORM_TYPE_BOOL, &shaderFlagEnabled, 1); gfx_rapi->set_uniform(NULL, "uShaderFlags", SHADER_UNIFORM_TYPE_INT, gShaderFlags, SHADER_FLAG_MAX); gfx_rapi->set_uniform(NULL, "uShaderFlagValues", SHADER_UNIFORM_TYPE_FLOAT, gShaderFlagValues, SHADER_FLAG_MAX); gfx_update_matrices(); diff --git a/src/pc/gfx/gfx_shader.c b/src/pc/gfx/gfx_shader.c index 3c8a61560..641566079 100644 --- a/src/pc/gfx/gfx_shader.c +++ b/src/pc/gfx/gfx_shader.c @@ -349,6 +349,7 @@ char *gfx_get_default_fragment_shader_from_cc(struct ColorCombiner *cc) { } if (world_geometry) { + append_line(fs_buf, &fs_len, "uniform bool uShaderFlagsEnabled;"); fs_len += sprintf(fs_buf + fs_len, "uniform int uShaderFlags[%d];\n", SHADER_FLAG_MAX); fs_len += sprintf(fs_buf + fs_len, "uniform float uShaderFlagValues[%d];\n", SHADER_FLAG_MAX); } @@ -404,6 +405,8 @@ char *gfx_get_default_fragment_shader_from_cc(struct ColorCombiner *cc) { // TODO discard if alpha is 0? if (world_geometry) { + append_line(fs_buf, &fs_len, "if (uShaderFlagsEnabled == true) {"); + // hue append_line(fs_buf, &fs_len, "if (uShaderFlags[0] == 1) {"); append_line(fs_buf, &fs_len, "vec3 hsv = rgb2hsv(texel.rgb);"); @@ -450,6 +453,8 @@ char *gfx_get_default_fragment_shader_from_cc(struct ColorCombiner *cc) { append_line(fs_buf, &fs_len, "float scan = sin(gl_FragCoord.y * 1.5) * 0.04;"); append_line(fs_buf, &fs_len, "texel.rgb -= scan * uShaderFlagValues[7];"); append_line(fs_buf, &fs_len, "}"); + + append_line(fs_buf, &fs_len, "}"); } if (opt_fog) {