#version 330 layout(std140) uniform SamplerInfo { vec2 OutSize; vec2 InSize; }; layout(std140) uniform RotScaleConfig { vec2 InScale; vec2 InOffset; float InRotation; }; out vec2 texCoord; out vec2 scaledCoord; void main(){ vec2 uv = vec2((gl_VertexID << 1) & 2, gl_VertexID & 2); vec4 pos = vec4(uv * vec2(2, 2) + vec2(-1, -1), 0, 1); gl_Position = pos; texCoord = uv; float Deg2Rad = 0.0174532925; float InRadians = InRotation * Deg2Rad; float Cosine = cos(InRadians); float Sine = sin(InRadians); float RotU = texCoord.x * Cosine - texCoord.y * Sine; float RotV = texCoord.y * Cosine + texCoord.x * Sine; scaledCoord = vec2(RotU, RotV) * InScale + InOffset; }