[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 org.openrndr.extra.color.spaces.ColorOKLABa
import kotlin.reflect.KClass import kotlin.reflect.KClass
internal fun generateColorTransform(kClass: KClass<*>): String { internal fun generateColorTransform(kClass: KClass<*>, identifier: String): String {
return when (kClass) { return when (kClass) {
ColorRGBa::class -> """""" 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") else -> error("color space not supported $kClass")
} }
} }

View File

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

View File

@@ -63,7 +63,7 @@ where C : ConvertibleToColorRGBa, C : AlgebraicColor<C>, C: CastableToVector4 {
vec4 color1 = p_color1; vec4 color1 = p_color1;
vec4 gradient = mix(color0, color1, pow(f, p_exponent)); vec4 gradient = mix(color0, color1, pow(f, p_exponent));
${generateColorTransform(color0::class)} ${generateColorTransform(color0::class, "gradient")}
x_fill *= 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]); float g = (sf - p_points[i]) / (p_points[i+1] - p_points[i]);
vec4 m = mix(color0, color1, clamp(g, 0.0, 1.0)); vec4 m = mix(color0, color1, clamp(g, 0.0, 1.0));
${generateColorTransform(colorType, "m")}
m.rgb *= m.a; m.rgb *= m.a;
gradient += m; gradient += m;
} }

View File

@@ -2,6 +2,8 @@ package gradients
import org.openrndr.application import org.openrndr.application
import org.openrndr.color.ColorRGBa 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.SpreadMethod
import org.openrndr.extra.shadestyles.fills.gradients.gradient import org.openrndr.extra.shadestyles.fills.gradients.gradient
import org.openrndr.math.Vector2 import org.openrndr.math.Vector2