color-transition-controller-composite.vert
933 Bytes
precision mediump float;
// <DALI>
uniform mat4 uMvpMatrix;
uniform vec3 uSize;
// </DALI>
uniform float uFlow;
uniform vec4 uUvTransform; // rotation, scale (initial, target))
attribute vec2 aPosition;
varying vec2 vUv;
varying vec2 vUvFlow;
void main()
{
vec4 position = uMvpMatrix * vec4(aPosition * uSize.xy, 0., 1.);
gl_Position = position;
vec2 uv = position.xy / (position.ww * 2.);
vUv = uv + vec2(.5);
float alpha = uFlow * .5 + .5;
vec2 uvRotationScale = mix(uUvTransform.xy, uUvTransform.zw, alpha);
float c = cos(uvRotationScale.x) * uvRotationScale.y;
float s = sin(uvRotationScale.x) * uvRotationScale.y;
vec4 uvMatrix = vec4(c, -s, s, c);
uv = vec2(dot(uvMatrix.xy, uv), dot(uvMatrix.zw, uv));
// N.B. +y is down which is well aligned with the inverted y of the off-screen render,
// however we need to flip the y of the uvs for the flow map.
vUvFlow = vec2(uv.x + .5, .5 - uv.y);
}