2019-06-05 20:20:12 -04:00
|
|
|
#version {{version}}
|
2019-06-05 17:35:46 -04:00
|
|
|
// Automatically generated from files in pathfinder/shaders/. Do not edit!
|
|
|
|
|
2019-06-05 20:20:12 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
precision highp float;
|
|
|
|
|
|
|
|
uniform vec2 uFramebufferSize;
|
|
|
|
uniform vec2 uTileSize;
|
|
|
|
|
2019-06-05 17:35:46 -04:00
|
|
|
in uvec2 aTessCoord;
|
2019-06-05 20:20:12 -04:00
|
|
|
in uint aFromPx;
|
|
|
|
in uint aToPx;
|
|
|
|
in vec2 aFromSubpx;
|
|
|
|
in vec2 aToSubpx;
|
|
|
|
in uint aTileIndex;
|
|
|
|
|
|
|
|
out vec2 vFrom;
|
|
|
|
out vec2 vTo;
|
|
|
|
|
|
|
|
vec2 computeTileOffset(uint tileIndex, float stencilTextureWidth){
|
|
|
|
uint tilesPerRow = uint(stencilTextureWidth / uTileSize . x);
|
2019-06-05 17:35:46 -04:00
|
|
|
uvec2 tileOffset = uvec2(tileIndex % tilesPerRow, tileIndex / tilesPerRow);
|
2019-06-05 20:20:12 -04:00
|
|
|
return vec2(tileOffset)* uTileSize;
|
|
|
|
}
|
|
|
|
|
|
|
|
void main(){
|
|
|
|
vec2 tileOrigin = computeTileOffset(aTileIndex, uFramebufferSize . x);
|
|
|
|
|
|
|
|
vec2 from = vec2(aFromPx & 15u, aFromPx >> 4u)+ aFromSubpx;
|
|
|
|
vec2 to = vec2(aToPx & 15u, aToPx >> 4u)+ aToSubpx;
|
|
|
|
|
|
|
|
vec2 position;
|
2019-06-05 17:35:46 -04:00
|
|
|
if(aTessCoord . x == 0u)
|
2019-06-05 20:20:12 -04:00
|
|
|
position . x = floor(min(from . x, to . x));
|
|
|
|
else
|
|
|
|
position . x = ceil(max(from . x, to . x));
|
2019-06-05 17:35:46 -04:00
|
|
|
if(aTessCoord . y == 0u)
|
2019-06-05 20:20:12 -04:00
|
|
|
position . y = floor(min(from . y, to . y));
|
|
|
|
else
|
|
|
|
position . y = uTileSize . y;
|
|
|
|
|
|
|
|
vFrom = from - position;
|
|
|
|
vTo = to - position;
|
|
|
|
|
2019-06-05 17:35:46 -04:00
|
|
|
vec2 globalPosition =(tileOrigin + position)/ uFramebufferSize * 2.0 - 1.0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gl_Position = vec4(globalPosition, 0.0, 1.0);
|
2019-06-05 20:20:12 -04:00
|
|
|
}
|
|
|
|
|