134 lines
4.1 KiB
GLSL
134 lines
4.1 KiB
GLSL
#version {{version}}
|
|
// Automatically generated from files in pathfinder/shaders/. Do not edit!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#extension GL_GOOGLE_include_directive : enable
|
|
|
|
precision highp float;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vec4 fetchUnscaled(sampler2D srcTexture, vec2 scale, vec2 originCoord, int entry){
|
|
return texture(srcTexture,(originCoord + vec2(0.5)+ vec2(entry, 0))* scale);
|
|
}
|
|
|
|
void computeTileVaryings(vec2 position,
|
|
int colorEntry,
|
|
sampler2D textureMetadata,
|
|
ivec2 textureMetadataSize,
|
|
out vec2 outColorTexCoord0,
|
|
out vec4 outBaseColor,
|
|
out vec4 outFilterParams0,
|
|
out vec4 outFilterParams1,
|
|
out vec4 outFilterParams2,
|
|
out vec4 outFilterParams3,
|
|
out vec4 outFilterParams4,
|
|
out int outCtrl){
|
|
vec2 metadataScale = vec2(1.0)/ vec2(textureMetadataSize);
|
|
vec2 metadataEntryCoord = vec2(colorEntry % 128 * 10, colorEntry / 128);
|
|
vec4 colorTexMatrix0 = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 0);
|
|
vec4 colorTexOffsets = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 1);
|
|
vec4 baseColor = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 2);
|
|
vec4 filterParams0 = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 3);
|
|
vec4 filterParams1 = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 4);
|
|
vec4 filterParams2 = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 5);
|
|
vec4 filterParams3 = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 6);
|
|
vec4 filterParams4 = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 7);
|
|
vec4 extra = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 8);
|
|
outColorTexCoord0 = mat2(colorTexMatrix0)* position + colorTexOffsets . xy;
|
|
outBaseColor = baseColor;
|
|
outFilterParams0 = filterParams0;
|
|
outFilterParams1 = filterParams1;
|
|
outFilterParams2 = filterParams2;
|
|
outFilterParams3 = filterParams3;
|
|
outFilterParams4 = filterParams4;
|
|
outCtrl = int(extra . x);
|
|
}
|
|
|
|
|
|
uniform mat4 uTransform;
|
|
uniform vec2 uTileSize;
|
|
uniform sampler2D uTextureMetadata;
|
|
uniform ivec2 uTextureMetadataSize;
|
|
uniform sampler2D uZBuffer;
|
|
uniform ivec2 uZBufferSize;
|
|
|
|
in ivec2 aTileOffset;
|
|
in ivec2 aTileOrigin;
|
|
in uvec4 aMaskTexCoord0;
|
|
in ivec2 aCtrlBackdrop;
|
|
in int aPathIndex;
|
|
in int aColor;
|
|
|
|
out vec3 vMaskTexCoord0;
|
|
out vec2 vColorTexCoord0;
|
|
out vec4 vBaseColor;
|
|
out float vTileCtrl;
|
|
out vec4 vFilterParams0;
|
|
out vec4 vFilterParams1;
|
|
out vec4 vFilterParams2;
|
|
out vec4 vFilterParams3;
|
|
out vec4 vFilterParams4;
|
|
out float vCtrl;
|
|
|
|
void main(){
|
|
vec2 tileOrigin = vec2(aTileOrigin), tileOffset = vec2(aTileOffset);
|
|
vec2 position =(tileOrigin + tileOffset)* uTileSize;
|
|
|
|
ivec4 zValue = ivec4(texture(uZBuffer,(tileOrigin + vec2(0.5))/ vec2(uZBufferSize))* 255.0);
|
|
if(aPathIndex <(zValue . x |(zValue . y << 8)|(zValue . z << 16)|(zValue . w << 24))){
|
|
gl_Position = vec4(0.0);
|
|
return;
|
|
}
|
|
|
|
uvec2 maskTileCoord = uvec2(aMaskTexCoord0 . x, aMaskTexCoord0 . y + 256u * aMaskTexCoord0 . z);
|
|
vec2 maskTexCoord0 =(vec2(maskTileCoord)+ tileOffset)* uTileSize;
|
|
if(aCtrlBackdrop . y == 0 && aMaskTexCoord0 . w != 0u){
|
|
gl_Position = vec4(0.0);
|
|
return;
|
|
}
|
|
|
|
int ctrl;
|
|
computeTileVaryings(position,
|
|
aColor,
|
|
uTextureMetadata,
|
|
uTextureMetadataSize,
|
|
vColorTexCoord0,
|
|
vBaseColor,
|
|
vFilterParams0,
|
|
vFilterParams1,
|
|
vFilterParams2,
|
|
vFilterParams3,
|
|
vFilterParams4,
|
|
ctrl);
|
|
|
|
vTileCtrl = float(aCtrlBackdrop . x);
|
|
vCtrl = float(ctrl);
|
|
vMaskTexCoord0 = vec3(maskTexCoord0, float(aCtrlBackdrop . y));
|
|
gl_Position = uTransform * vec4(position, 0.0, 1.0);
|
|
}
|
|
|