30 lines
801 B
GLSL
30 lines
801 B
GLSL
#version 330 core
|
|
layout (location = 0) in vec2 aPos;
|
|
layout (location = 1) in vec2 aTexCoords;
|
|
|
|
out vec2 TexCoords;
|
|
|
|
uniform vec2 screenSize;
|
|
uniform vec2 pixelPos;
|
|
uniform vec2 pixelScale;
|
|
|
|
uniform float z;
|
|
uniform float rotation;
|
|
|
|
uniform int uvMode = 0; // 0 = stretch, 1 = tile
|
|
uniform vec3 tileScale = vec3(1.0);
|
|
uniform vec2 uvOffset = vec2(0.0);
|
|
|
|
void main()
|
|
{
|
|
vec2 unitPos = aPos * 0.5 + 0.5;
|
|
vec2 pixelPosTopLeft = pixelPos + unitPos * pixelScale;
|
|
vec2 ndc = (pixelPosTopLeft / screenSize) * 2.0 - 1.0;
|
|
ndc.y = -ndc.y;
|
|
|
|
gl_Position = vec4(ndc, 0.0f, 1.0f);
|
|
|
|
// Screen y runs down here, so flip v to keep images the right way up
|
|
vec2 uv = vec2(aTexCoords.x, 1.0 - aTexCoords.y);
|
|
TexCoords = (uvMode == 1 ? uv * tileScale.xy : uv) + uvOffset;
|
|
} |