Files
Foundry-VTT-Docker/resources/app/client/pixi/webgl/shaders/region/base.js
2025-01-04 00:34:03 +01:00

66 lines
1.8 KiB
JavaScript

/**
* The shader used by {@link RegionMesh}.
*/
class RegionShader extends AbstractBaseShader {
/** @override */
static vertexShader = `
precision ${PIXI.settings.PRECISION_VERTEX} float;
attribute vec2 aVertexPosition;
uniform mat3 translationMatrix;
uniform mat3 projectionMatrix;
uniform vec2 canvasDimensions;
uniform vec4 sceneDimensions;
uniform vec2 screenDimensions;
varying vec2 vCanvasCoord; // normalized canvas coordinates
varying vec2 vSceneCoord; // normalized scene coordinates
varying vec2 vScreenCoord; // normalized screen coordinates
void main() {
vec2 pixelCoord = aVertexPosition;
vCanvasCoord = pixelCoord / canvasDimensions;
vSceneCoord = (pixelCoord - sceneDimensions.xy) / sceneDimensions.zw;
vec3 tPos = translationMatrix * vec3(aVertexPosition, 1.0);
vScreenCoord = tPos.xy / screenDimensions;
gl_Position = vec4((projectionMatrix * tPos).xy, 0.0, 1.0);
}
`;
/** @override */
static fragmentShader = `
precision ${PIXI.settings.PRECISION_FRAGMENT} float;
uniform vec4 tintAlpha;
void main() {
gl_FragColor = tintAlpha;
}
`;
/* ---------------------------------------- */
/** @override */
static defaultUniforms = {
canvasDimensions: [1, 1],
sceneDimensions: [0, 0, 1, 1],
screenDimensions: [1, 1],
tintAlpha: [1, 1, 1, 1]
};
/* ---------------------------------------- */
/** @override */
_preRender(mesh, renderer) {
const uniforms = this.uniforms;
uniforms.tintAlpha = mesh._cachedTint;
const dimensions = canvas.dimensions;
uniforms.canvasDimensions[0] = dimensions.width;
uniforms.canvasDimensions[1] = dimensions.height;
uniforms.sceneDimensions = dimensions.sceneRect;
uniforms.screenDimensions = canvas.screenDimensions;
}
}