Skip to content

Commit

Permalink
Merge pull request #89470 from jsjtxietian/msdf-uv
Browse files Browse the repository at this point in the history
Fix shader compilation error when enabling texture MSDF and UV1 Triplanar at the same time
  • Loading branch information
akien-mga committed May 29, 2024
2 parents 46629e1 + 0c0723c commit 2c50e87
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions scene/resources/material.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -822,7 +822,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);
Expand Down Expand Up @@ -1271,7 +1282,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);
Expand Down Expand Up @@ -1414,7 +1425,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
Expand All @@ -1427,11 +1438,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);
Expand Down

0 comments on commit 2c50e87

Please sign in to comment.