OpenGL supports three-color gradients. There’s a classic triangle drawn with red, green, blue corners, and then within the triangle there’s a smooth gradient. SVG unfortunately does not support three-color gradients. It only has two-color gradients. But someone on on stackoverflow[1] suggested that gradients can work on masks too. With two two-color gradients together, can we make the classic OpenGL three-color triangle?
The first gradient is bottom to top alpha and the second gradient is left to right color. I put blue underneath the red-green triangle. It works!
<svg viewBox="0 0 100 100">
<defs>
<!-- see http://stackoverflow.com/questions/21611795/how-to-create-a-transparency-gradient-mask-using-an-svg-filter -->
<linearGradient id="bottom-to-top-mask" y2="1" x2="0" color-interpolation="linearRGB">
<stop offset="0" stop-color="white" stop-opacity="0.0"/>
<stop offset="0.9" stop-color="white" stop-opacity="1.0"/>
</linearGradient>
<mask id="fade" maskContentUnits="objectBoundingBox">
<rect width="1" height="1" fill="url(#bottom-to-top-mask)"/>
</mask>
<linearGradient id="left-to-right-color" y2="0" color-interpolation="linearRGB">
<stop offset="0.1" stop-color="hsl(120,50%,50%)"/>
<stop offset="0.9" stop-color="hsl(00,50%,50%)"/>
</linearGradient>
</defs>
<path d="M 50,0 L 100,100 L 0,100 Z" fill="blue"/>
<path d="M 50,0 L 100,100 L 0,100 Z" fill="url(#left-to-right-color)" mask="url(#fade)"/>
</svg>
This may not be practical but it was fun to try.