From 49a3f3ea49ba27e1b32984624ee66956e3f9c210 Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Thu, 6 Mar 2025 13:05:00 +0100 Subject: [PATCH] [orx-shade-styles] Re-introduce color conversion in GradientBase --- orx-shade-styles/src/commonMain/kotlin/ColorspaceHelper.kt | 4 ++-- orx-shade-styles/src/commonMain/kotlin/LinearGradient.kt | 2 +- .../src/commonMain/kotlin/NPointLinearGradient.kt | 2 +- orx-shade-styles/src/commonMain/kotlin/RadialGradient.kt | 2 +- .../src/commonMain/kotlin/fills/gradients/GradientBase.kt | 2 ++ .../src/jvmDemo/kotlin/gradients/DemoGradient01.kt | 2 ++ 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/orx-shade-styles/src/commonMain/kotlin/ColorspaceHelper.kt b/orx-shade-styles/src/commonMain/kotlin/ColorspaceHelper.kt index ee159118..464c61b2 100644 --- a/orx-shade-styles/src/commonMain/kotlin/ColorspaceHelper.kt +++ b/orx-shade-styles/src/commonMain/kotlin/ColorspaceHelper.kt @@ -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") } } \ No newline at end of file diff --git a/orx-shade-styles/src/commonMain/kotlin/LinearGradient.kt b/orx-shade-styles/src/commonMain/kotlin/LinearGradient.kt index 2ff8d0fc..4fd7ab58 100644 --- a/orx-shade-styles/src/commonMain/kotlin/LinearGradient.kt +++ b/orx-shade-styles/src/commonMain/kotlin/LinearGradient.kt @@ -74,7 +74,7 @@ open class LinearGradientBase( } vec4 gradient = mix(color0, color1, t); - ${generateColorTransform(color0::class)} + ${generateColorTransform(color0::class, "gradient")} x_fill *= gradient; """ } diff --git a/orx-shade-styles/src/commonMain/kotlin/NPointLinearGradient.kt b/orx-shade-styles/src/commonMain/kotlin/NPointLinearGradient.kt index 23d2ff16..73c2f208 100644 --- a/orx-shade-styles/src/commonMain/kotlin/NPointLinearGradient.kt +++ b/orx-shade-styles/src/commonMain/kotlin/NPointLinearGradient.kt @@ -58,7 +58,7 @@ open class NPointLinearGradientBase( 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) { diff --git a/orx-shade-styles/src/commonMain/kotlin/RadialGradient.kt b/orx-shade-styles/src/commonMain/kotlin/RadialGradient.kt index 8fc08c1f..d05e9f87 100644 --- a/orx-shade-styles/src/commonMain/kotlin/RadialGradient.kt +++ b/orx-shade-styles/src/commonMain/kotlin/RadialGradient.kt @@ -63,7 +63,7 @@ where C : ConvertibleToColorRGBa, C : AlgebraicColor, 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; """ diff --git a/orx-shade-styles/src/commonMain/kotlin/fills/gradients/GradientBase.kt b/orx-shade-styles/src/commonMain/kotlin/fills/gradients/GradientBase.kt index 61dc58e4..0f780bd0 100644 --- a/orx-shade-styles/src/commonMain/kotlin/fills/gradients/GradientBase.kt +++ b/orx-shade-styles/src/commonMain/kotlin/fills/gradients/GradientBase.kt @@ -129,6 +129,8 @@ open class GradientBase( 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; } diff --git a/orx-shade-styles/src/jvmDemo/kotlin/gradients/DemoGradient01.kt b/orx-shade-styles/src/jvmDemo/kotlin/gradients/DemoGradient01.kt index 31b61c0e..e4122d09 100644 --- a/orx-shade-styles/src/jvmDemo/kotlin/gradients/DemoGradient01.kt +++ b/orx-shade-styles/src/jvmDemo/kotlin/gradients/DemoGradient01.kt @@ -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