2020-02-05 00:50:13 -05:00
|
|
|
#version 330
|
|
|
|
|
2020-03-19 19:44:45 -04:00
|
|
|
// pathfinder/shaders/tile.vs.glsl
|
2019-01-14 22:32:53 -05:00
|
|
|
//
|
2020-02-05 00:50:13 -05:00
|
|
|
// Copyright © 2020 The Pathfinder Project Developers.
|
2019-01-14 22:32:53 -05:00
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
|
|
// option. This file may not be copied, modified, or distributed
|
|
|
|
// except according to those terms.
|
|
|
|
|
2020-02-05 00:50:13 -05:00
|
|
|
precision highp float;
|
2020-03-27 17:53:00 -04:00
|
|
|
precision highp sampler2D;
|
2020-02-05 00:50:13 -05:00
|
|
|
|
2019-06-25 14:32:39 -04:00
|
|
|
uniform mat4 uTransform;
|
2019-01-14 22:32:53 -05:00
|
|
|
uniform vec2 uTileSize;
|
2020-04-06 14:08:57 -04:00
|
|
|
uniform sampler2D uTextureMetadata;
|
|
|
|
uniform ivec2 uTextureMetadataSize;
|
2019-01-14 22:32:53 -05:00
|
|
|
|
2020-04-06 14:08:57 -04:00
|
|
|
in ivec2 aTileOffset;
|
|
|
|
in ivec2 aTileOrigin;
|
|
|
|
in uvec2 aMaskTexCoord0;
|
|
|
|
in uvec2 aMaskTexCoord1;
|
2020-03-19 19:44:45 -04:00
|
|
|
in ivec2 aMaskBackdrop;
|
2020-04-06 14:08:57 -04:00
|
|
|
in int aColor;
|
2019-01-14 22:32:53 -05:00
|
|
|
|
2020-03-19 19:44:45 -04:00
|
|
|
out vec3 vMaskTexCoord0;
|
|
|
|
out vec3 vMaskTexCoord1;
|
|
|
|
out vec2 vColorTexCoord0;
|
2020-04-13 14:52:10 -04:00
|
|
|
out vec4 vBaseColor;
|
2019-03-22 17:28:18 -04:00
|
|
|
|
2020-02-05 00:50:13 -05:00
|
|
|
void main() {
|
2020-04-06 14:08:57 -04:00
|
|
|
vec2 tileOrigin = vec2(aTileOrigin), tileOffset = vec2(aTileOffset);
|
|
|
|
vec2 position = (tileOrigin + tileOffset) * uTileSize;
|
|
|
|
|
|
|
|
vec2 maskTexCoord0 = (vec2(aMaskTexCoord0) + tileOffset) / 256.0;
|
|
|
|
vec2 maskTexCoord1 = (vec2(aMaskTexCoord1) + tileOffset) / 256.0;
|
|
|
|
|
|
|
|
vec2 textureMetadataScale = vec2(1.0) / vec2(uTextureMetadataSize);
|
2020-04-13 14:52:10 -04:00
|
|
|
vec2 metadataEntryCoord = ivec2(aColor % 128 * 4, aColor / 128);
|
2020-04-06 14:08:57 -04:00
|
|
|
vec2 colorTexMatrix0Coord = (metadataEntryCoord + vec2(0.5, 0.5)) * textureMetadataScale;
|
|
|
|
vec2 colorTexOffsetsCoord = (metadataEntryCoord + vec2(1.5, 0.5)) * textureMetadataScale;
|
2020-04-13 14:52:10 -04:00
|
|
|
vec2 baseColorCoord = (metadataEntryCoord + vec2(2.5, 0.5)) * textureMetadataScale;
|
2020-04-06 14:08:57 -04:00
|
|
|
vec4 colorTexMatrix0 = texture(uTextureMetadata, colorTexMatrix0Coord);
|
|
|
|
vec4 colorTexOffsets = texture(uTextureMetadata, colorTexOffsetsCoord);
|
2020-04-13 14:52:10 -04:00
|
|
|
vec4 baseColor = texture(uTextureMetadata, baseColorCoord);
|
2020-04-06 14:08:57 -04:00
|
|
|
|
|
|
|
vColorTexCoord0 = mat2(colorTexMatrix0) * position + colorTexOffsets.xy;
|
|
|
|
vMaskTexCoord0 = vec3(maskTexCoord0, float(aMaskBackdrop.x));
|
|
|
|
vMaskTexCoord1 = vec3(maskTexCoord1, float(aMaskBackdrop.y));
|
2020-04-13 14:52:10 -04:00
|
|
|
vBaseColor = baseColor;
|
2019-06-25 14:32:39 -04:00
|
|
|
gl_Position = uTransform * vec4(position, 0.0, 1.0);
|
2019-01-14 22:32:53 -05:00
|
|
|
}
|