2019-09-17 20:19:04 +02:00
|
|
|
#ifdef GL_ES
|
|
|
|
precision mediump float;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
attribute vec2 a_position;
|
|
|
|
|
2019-09-20 17:48:00 +02:00
|
|
|
uniform float u_time;
|
|
|
|
|
2019-09-17 20:19:04 +02:00
|
|
|
uniform vec4 u_viewbox; // [x, y, width, height]
|
|
|
|
uniform vec2 u_resolution;
|
2019-09-19 17:52:48 +02:00
|
|
|
uniform mat3 u_trans;
|
2019-09-20 17:48:00 +02:00
|
|
|
uniform mat3 u_trans_next;
|
2019-09-17 20:19:04 +02:00
|
|
|
|
|
|
|
varying vec2 v_pos;
|
|
|
|
|
|
|
|
void main() {
|
2019-09-19 17:52:48 +02:00
|
|
|
vec3 pos = vec3(a_position, 1.0);
|
2019-09-17 20:19:04 +02:00
|
|
|
|
2019-09-21 11:37:26 +02:00
|
|
|
mat3 trans = (u_trans_next * (1.0 - u_time)) + (u_trans * u_time);
|
2019-09-20 17:48:00 +02:00
|
|
|
|
|
|
|
pos = trans * pos;
|
2019-09-17 20:19:04 +02:00
|
|
|
|
2019-09-19 17:52:48 +02:00
|
|
|
vec2 uv = pos.xy;
|
2019-09-17 20:19:04 +02:00
|
|
|
|
2019-09-19 17:52:48 +02:00
|
|
|
// Viewbox's center is top left, a_position's is in the center to the screen
|
|
|
|
// So translate and scale the viewbox**
|
|
|
|
uv -= u_viewbox.xy + (u_viewbox.zw * 0.5);
|
|
|
|
uv /= u_viewbox.zw * 0.5;
|
2019-09-17 20:19:04 +02:00
|
|
|
|
2019-09-19 17:52:48 +02:00
|
|
|
v_pos = (uv.xy + 1.0) * 0.5;
|
|
|
|
|
|
|
|
gl_Position = vec4(uv.xy, 0.0, 1.0);
|
2019-09-17 20:19:04 +02:00
|
|
|
}
|