66 lines
1.8 KiB
JavaScript
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;
|
|
}
|
|
}
|