#version 300 es precision mediump float; in vec4 colorLeft; in vec4 colorRight; in float edge; in float midpoint; out vec4 fragColor; float curveWithMidpoint(float x, float midpoint) { float curveSample = pow(x, midpoint / (1.0 - midpoint)); float inverseCurveSample = 1.0 - pow(1.0 - x, (1.0 - midpoint) / midpoint); return (curveSample + inverseCurveSample) * 0.5; } void main() { float colorMix = curveWithMidpoint(edge, midpoint); fragColor = colorLeft * (1.0 - colorMix) + colorRight * colorMix; }