summaryrefslogtreecommitdiffstats
path: root/scene
diff options
context:
space:
mode:
authorjsjtxietian <jsjtxietian@outlook.com>2024-03-15 12:52:28 +0800
committerjsjtxietian <jsjtxietian@outlook.com>2024-03-15 12:52:28 +0800
commit0c0723c659ffd77e6db96e855ca837caaf4b1c0e (patch)
tree629b0e34e8410247a5a204d1ffc9851a099e0dc0 /scene
parent0175be8948d68cf90c55ce08e8e5bf46ea29ce40 (diff)
downloadredot-engine-0c0723c659ffd77e6db96e855ca837caaf4b1c0e.tar.gz
Fix shader compilation error when enabling texture MSDF and UV1 Triplanar at the same time
Diffstat (limited to 'scene')
-rw-r--r--scene/resources/material.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp
index b381096df8..0f438c8464 100644
--- a/scene/resources/material.cpp
+++ b/scene/resources/material.cpp
@@ -821,7 +821,18 @@ uniform float distance_fade_max : hint_range(0.0, 4096.0, 0.01);
)";
}
- if (flags[FLAG_ALBEDO_TEXTURE_MSDF]) {
+ if (flags[FLAG_ALBEDO_TEXTURE_MSDF] && flags[FLAG_UV1_USE_TRIPLANAR]) {
+ String msg = "MSDF is not supported on triplanar materials. Ignoring MSDF in favor of triplanar mapping.";
+ if (textures[TEXTURE_ALBEDO].is_valid()) {
+ WARN_PRINT(vformat("%s (albedo %s): " + msg, get_path(), textures[TEXTURE_ALBEDO]->get_path()));
+ } else if (!get_path().is_empty()) {
+ WARN_PRINT(vformat("%s: " + msg, get_path()));
+ } else {
+ WARN_PRINT(msg);
+ }
+ }
+
+ if (flags[FLAG_ALBEDO_TEXTURE_MSDF] && !flags[FLAG_UV1_USE_TRIPLANAR]) {
code += R"(
uniform float msdf_pixel_range : hint_range(1.0, 100.0, 1.0);
uniform float msdf_outline_size : hint_range(0.0, 250.0, 1.0);
@@ -1270,7 +1281,7 @@ void vertex() {)";
code += "}\n";
- if (flags[FLAG_ALBEDO_TEXTURE_MSDF]) {
+ if (flags[FLAG_ALBEDO_TEXTURE_MSDF] && !flags[FLAG_UV1_USE_TRIPLANAR]) {
code += R"(
float msdf_median(float r, float g, float b, float a) {
return min(max(min(r, g), min(max(r, g), b)), a);
@@ -1413,7 +1424,7 @@ void fragment() {)";
}
}
- if (flags[FLAG_ALBEDO_TEXTURE_MSDF]) {
+ if (flags[FLAG_ALBEDO_TEXTURE_MSDF] && !flags[FLAG_UV1_USE_TRIPLANAR]) {
code += R"(
{
// Albedo Texture MSDF: Enabled
@@ -1426,11 +1437,7 @@ void fragment() {)";
if (flags[FLAG_USE_POINT_SIZE]) {
code += " vec2 dest_size = vec2(1.0) / fwidth(POINT_COORD);\n";
} else {
- if (flags[FLAG_UV1_USE_TRIPLANAR]) {
- code += " vec2 dest_size = vec2(1.0) / fwidth(uv1_triplanar_pos);\n";
- } else {
- code += " vec2 dest_size = vec2(1.0) / fwidth(base_uv);\n";
- }
+ code += " vec2 dest_size = vec2(1.0) / fwidth(base_uv);\n";
}
code += R"(
float px_size = max(0.5 * dot(msdf_size, dest_size), 1.0);