[orx-shade-styles] Re-introduce color conversion in GradientBase

This commit is contained in:
Edwin Jakobs
2025-03-06 13:05:00 +01:00
parent 3ac541354a
commit 49a3f3ea49
6 changed files with 9 additions and 5 deletions

View File

@@ -4,10 +4,10 @@ import org.openrndr.color.ColorRGBa
import org.openrndr.extra.color.spaces.ColorOKLABa
import kotlin.reflect.KClass
internal fun generateColorTransform(kClass: KClass<*>): String {
internal fun generateColorTransform(kClass: KClass<*>, identifier: String): String {
return when (kClass) {
ColorRGBa::class -> """"""
ColorOKLABa::class -> """gradient = oklab_to_linear_rgb(gradient);"""
ColorOKLABa::class -> """$identifier = oklab_to_linear_rgb($identifier);"""
else -> error("color space not supported $kClass")
}
}

View File

@@ -74,7 +74,7 @@ open class LinearGradientBase<C>(
}
vec4 gradient = mix(color0, color1, t);
${generateColorTransform(color0::class)}
${generateColorTransform(color0::class, "gradient")}
x_fill *= gradient;
"""
}

View File

@@ -58,7 +58,7 @@ open class NPointLinearGradientBase<C>(
float g = (f - p_points[i]) / (p_points[i+1] - p_points[i]);
vec4 gradient = mix(color0, color1, clamp(g, 0.0, 1.0));
${generateColorTransform(colors[0]::class)}
${generateColorTransform(colors[0]::class, "gradient")}
x_fill *= gradient;
if (x_fill.a != 0) {

View File

@@ -63,7 +63,7 @@ where C : ConvertibleToColorRGBa, C : AlgebraicColor<C>, C: CastableToVector4 {
vec4 color1 = p_color1;
vec4 gradient = mix(color0, color1, pow(f, p_exponent));
${generateColorTransform(color0::class)}
${generateColorTransform(color0::class, "gradient")}
x_fill *= gradient;
"""

View File

@@ -129,6 +129,8 @@ open class GradientBase<C>(
float g = (sf - p_points[i]) / (p_points[i+1] - p_points[i]);
vec4 m = mix(color0, color1, clamp(g, 0.0, 1.0));
${generateColorTransform(colorType, "m")}
m.rgb *= m.a;
gradient += m;
}

View File

@@ -2,6 +2,8 @@ package gradients
import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.extra.color.spaces.ColorOKLABa
import org.openrndr.extra.color.spaces.toOKLABa
import org.openrndr.extra.shadestyles.fills.SpreadMethod
import org.openrndr.extra.shadestyles.fills.gradients.gradient
import org.openrndr.math.Vector2