attribute vec2 aVertexPosition; uniform mat3 projectionMatrix; uniform vec4 sourceFrame; uniform vec4 destinationFrame; varying vec2 vTextureCoord; vec4 filterVertexPosition( void ) { vec2 position = aVertexPosition * max(sourceFrame.zw, vec2(0.)) + sourceFrame.xy; return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0); } vec2 filterTextureCoord( void ) { return aVertexPosition * (sourceFrame.zw / destinationFrame.zw); } void main(void) { gl_Position = filterVertexPosition(); vTextureCoord = filterTextureCoord(); }