precision highp float; attribute vec3 position; varying vec2 uv; varying vec2 hdConformedUV; uniform vec2 u_RenderSize; #ifdef NEEDS_CONTENT_TRANSFORM uniform mat4 uContentTransformMatrix; #endif vec2 calculateHdConformedUV(vec2 uv, vec2 u_RenderSize) { float longestDim = max(u_RenderSize.x, u_RenderSize.y); float ratio = longestDim/1280.0; vec2 hdConformedUV = vec2(0.0); if (u_RenderSize.y >= u_RenderSize.x) { hdConformedUV.x = uv.x * u_RenderSize.x / (u_RenderSize.x / ratio); hdConformedUV.y = uv.y * ratio; } else { hdConformedUV.x = uv.x * ratio; hdConformedUV.y = uv.y * u_RenderSize.y / (u_RenderSize.y / ratio); } return hdConformedUV; } void main() { #ifdef NEEDS_CONTENT_TRANSFORM gl_Position = uContentTransformMatrix * vec4(position, 1.0); #else gl_Position = vec4(position, 1.0); #endif uv = position.xy * 0.5 + 0.5; hdConformedUV = calculateHdConformedUV(uv, u_RenderSize); }