renderer: nuke multisample_edges in favor of a faster algorithm

This commit is contained in:
vaxerski
2023-09-30 01:41:05 +01:00
parent 495d4f2d11
commit c298439433
5 changed files with 63 additions and 93 deletions

View File

@@ -10,6 +10,7 @@ inline static constexpr auto ROUNDED_SHADER_FUNC = [](const std::string colorVar
pixCoord -= topLeft + fullSize * 0.5;
pixCoord *= vec2(lessThan(pixCoord, vec2(0.0))) * -2.0 + 1.0;
pixCoord -= fullSize * 0.5 - radius;
pixCoord += vec2(1.0, 1.0) / fullSize; // center the pix dont make it top-left
if (pixCoord.x + pixCoord.y > radius) {
@@ -18,20 +19,13 @@ inline static constexpr auto ROUNDED_SHADER_FUNC = [](const std::string colorVar
if (dist > radius)
discard;
if (primitiveMultisample == 1 && dist > radius - 1.0) {
float distances = 0.0;
distances += float(length(pixCoord + vec2(0.25, 0.25)) < radius);
distances += float(length(pixCoord + vec2(0.75, 0.25)) < radius);
distances += float(length(pixCoord + vec2(0.25, 0.75)) < radius);
distances += float(length(pixCoord + vec2(0.75, 0.75)) < radius);
if (dist > radius - 1.0) {
float dist = length(pixCoord);
if (distances == 0.0)
discard;
distances /= 4.0;
float normalized = 1.0 - clamp(smoothstep(0.0, 1.0, dist - radius + 0.5), 0.0, 1.0);
)#" +
colorVarName + R"#( = )#" + colorVarName + R"#( * distances;
colorVarName + R"#( = )#" + colorVarName + R"#( * normalized;
}
}
@@ -60,8 +54,6 @@ uniform vec2 topLeft;
uniform vec2 fullSize;
uniform float radius;
uniform int primitiveMultisample;
void main() {
vec4 pixColor = v_color;
@@ -102,8 +94,6 @@ uniform float discardAlphaValue;
uniform int applyTint;
uniform vec3 tint;
uniform int primitiveMultisample;
void main() {
vec4 pixColor = texture2D(tex, v_texcoord);
@@ -154,8 +144,6 @@ uniform int discardAlphaValue;
uniform int applyTint;
uniform vec3 tint;
uniform int primitiveMultisample;
void main() {
if (discardOpaque == 1 && alpha == 1.0)
@@ -274,8 +262,6 @@ uniform int discardAlphaValue;
uniform int applyTint;
uniform vec3 tint;
uniform int primitiveMultisample;
void main() {
vec4 pixColor = texture2D(texture0, v_texcoord);