pathfinder/resources/shaders/gl3/d3d9/tile.vs.glsl

124 lines
3.6 KiB
Plaintext
Raw Normal View History

#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 int outCtrl){
vec2 metadataScale = vec2(1.0)/ vec2(textureMetadataSize);
vec2 metadataEntryCoord = vec2(colorEntry % 128 * 8, 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 extra = fetchUnscaled(textureMetadata, metadataScale, metadataEntryCoord, 6);
outColorTexCoord0 = mat2(colorTexMatrix0)* position + colorTexOffsets . xy;
outBaseColor = baseColor;
outFilterParams0 = filterParams0;
outFilterParams1 = filterParams1;
outFilterParams2 = filterParams2;
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 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,
ctrl);
vTileCtrl = float(aCtrlBackdrop . x);
vCtrl = float(ctrl);
vMaskTexCoord0 = vec3(maskTexCoord0, float(aCtrlBackdrop . y));
gl_Position = uTransform * vec4(position, 0.0, 1.0);
}