#version 300 es out mediump vec4 _fragData; uniform highp float _Speed; uniform highp vec4 _Time; highp vec4 func( in highp vec2 uv ) { highp float s = sin(_Speed * _Time.x); highp float c = cos(_Speed * _Time.x); highp mat2 rotationMatrix = mat2(c, s, -s, c); // various operations on a matrix rotationMatrix = rotationMatrix * 2.0; rotationMatrix = rotationMatrix - 1.0; rotationMatrix = s - rotationMatrix; rotationMatrix = c + rotationMatrix; rotationMatrix /= s; mediump mat2 halfMatrix = mat2(c, s, -s, c); halfMatrix = halfMatrix * 2.0; halfMatrix = halfMatrix - 1.0; halfMatrix = s - halfMatrix; halfMatrix = c + halfMatrix; halfMatrix /= s; return vec4((rotationMatrix * uv), (halfMatrix * uv)); } in highp vec2 uv; void main() { _fragData = func(uv); }