iwmlib/3rdparty/pixi/pixi-projection.js
2019-03-21 09:57:27 +01:00

3931 lines
165 KiB
JavaScript
Executable File

var pixi_projection;
(function (pixi_projection) {
var utils;
(function (utils) {
function createIndicesForQuads(size) {
var totalIndices = size * 6;
var indices = new Uint16Array(totalIndices);
for (var i = 0, j = 0; i < totalIndices; i += 6, j += 4) {
indices[i + 0] = j + 0;
indices[i + 1] = j + 1;
indices[i + 2] = j + 2;
indices[i + 3] = j + 0;
indices[i + 4] = j + 2;
indices[i + 5] = j + 3;
}
return indices;
}
utils.createIndicesForQuads = createIndicesForQuads;
function isPow2(v) {
return !(v & (v - 1)) && (!!v);
}
utils.isPow2 = isPow2;
function nextPow2(v) {
v += +(v === 0);
--v;
v |= v >>> 1;
v |= v >>> 2;
v |= v >>> 4;
v |= v >>> 8;
v |= v >>> 16;
return v + 1;
}
utils.nextPow2 = nextPow2;
function log2(v) {
var r, shift;
r = +(v > 0xFFFF) << 4;
v >>>= r;
shift = +(v > 0xFF) << 3;
v >>>= shift;
r |= shift;
shift = +(v > 0xF) << 2;
v >>>= shift;
r |= shift;
shift = +(v > 0x3) << 1;
v >>>= shift;
r |= shift;
return r | (v >> 1);
}
utils.log2 = log2;
function getIntersectionFactor(p1, p2, p3, p4, out) {
var A1 = p2.x - p1.x, B1 = p3.x - p4.x, C1 = p3.x - p1.x;
var A2 = p2.y - p1.y, B2 = p3.y - p4.y, C2 = p3.y - p1.y;
var D = A1 * B2 - A2 * B1;
if (Math.abs(D) < 1e-7) {
out.x = A1;
out.y = A2;
return 0;
}
var T = C1 * B2 - C2 * B1;
var U = A1 * C2 - A2 * C1;
var t = T / D, u = U / D;
if (u < (1e-6) || u - 1 > -1e-6) {
return -1;
}
out.x = p1.x + t * (p2.x - p1.x);
out.y = p1.y + t * (p2.y - p1.y);
return 1;
}
utils.getIntersectionFactor = getIntersectionFactor;
function getPositionFromQuad(p, anchor, out) {
out = out || new PIXI.Point();
var a1 = 1.0 - anchor.x, a2 = 1.0 - a1;
var b1 = 1.0 - anchor.y, b2 = 1.0 - b1;
out.x = (p[0].x * a1 + p[1].x * a2) * b1 + (p[3].x * a1 + p[2].x * a2) * b2;
out.y = (p[0].y * a1 + p[1].y * a2) * b1 + (p[3].y * a1 + p[2].y * a2) * b2;
return out;
}
utils.getPositionFromQuad = getPositionFromQuad;
})(utils = pixi_projection.utils || (pixi_projection.utils = {}));
})(pixi_projection || (pixi_projection = {}));
PIXI.projection = pixi_projection;
var pixi_projection;
(function (pixi_projection) {
var AbstractProjection = (function () {
function AbstractProjection(legacy, enable) {
if (enable === void 0) { enable = true; }
this._enabled = false;
this.legacy = legacy;
if (enable) {
this.enabled = true;
}
this.legacy.proj = this;
}
Object.defineProperty(AbstractProjection.prototype, "enabled", {
get: function () {
return this._enabled;
},
set: function (value) {
this._enabled = value;
},
enumerable: true,
configurable: true
});
AbstractProjection.prototype.clear = function () {
};
return AbstractProjection;
}());
pixi_projection.AbstractProjection = AbstractProjection;
var TRANSFORM_STEP;
(function (TRANSFORM_STEP) {
TRANSFORM_STEP[TRANSFORM_STEP["NONE"] = 0] = "NONE";
TRANSFORM_STEP[TRANSFORM_STEP["BEFORE_PROJ"] = 4] = "BEFORE_PROJ";
TRANSFORM_STEP[TRANSFORM_STEP["PROJ"] = 5] = "PROJ";
TRANSFORM_STEP[TRANSFORM_STEP["ALL"] = 9] = "ALL";
})(TRANSFORM_STEP = pixi_projection.TRANSFORM_STEP || (pixi_projection.TRANSFORM_STEP = {}));
})(pixi_projection || (pixi_projection = {}));
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var pixi_projection;
(function (pixi_projection) {
function transformHack(parentTransform) {
var proj = this.proj;
var ta = this;
var pwid = parentTransform._worldID;
var lt = ta.localTransform;
if (ta._localID !== ta._currentLocalID) {
lt.a = ta._cx * ta.scale._x;
lt.b = ta._sx * ta.scale._x;
lt.c = ta._cy * ta.scale._y;
lt.d = ta._sy * ta.scale._y;
lt.tx = ta.position._x - ((ta.pivot._x * lt.a) + (ta.pivot._y * lt.c));
lt.ty = ta.position._y - ((ta.pivot._x * lt.b) + (ta.pivot._y * lt.d));
ta._currentLocalID = ta._localID;
proj._currentProjID = -1;
}
var _matrixID = proj._projID;
if (proj._currentProjID !== _matrixID) {
proj._currentProjID = _matrixID;
proj.updateLocalTransform(lt);
ta._parentID = -1;
}
if (ta._parentID !== pwid) {
var pp = parentTransform.proj;
if (pp && !pp._affine) {
proj.world.setToMult(pp.world, proj.local);
}
else {
proj.world.setToMultLegacy(parentTransform.worldTransform, proj.local);
}
proj.world.copy(ta.worldTransform, proj._affine);
ta._parentID = pwid;
ta._worldID++;
}
}
var LinearProjection = (function (_super) {
__extends(LinearProjection, _super);
function LinearProjection() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this._projID = 0;
_this._currentProjID = -1;
_this._affine = pixi_projection.AFFINE.NONE;
return _this;
}
LinearProjection.prototype.updateLocalTransform = function (lt) {
};
Object.defineProperty(LinearProjection.prototype, "affine", {
get: function () {
return this._affine;
},
set: function (value) {
if (this._affine == value)
return;
this._affine = value;
this._currentProjID = -1;
},
enumerable: true,
configurable: true
});
Object.defineProperty(LinearProjection.prototype, "enabled", {
set: function (value) {
if (value === this._enabled) {
return;
}
this._enabled = value;
if (value) {
this.legacy.updateTransform = transformHack;
this.legacy._parentID = -1;
}
else {
this.legacy.updateTransform = PIXI.TransformStatic.prototype.updateTransform;
this.legacy._parentID = -1;
}
},
enumerable: true,
configurable: true
});
LinearProjection.prototype.clear = function () {
this._currentProjID = -1;
this._projID = 0;
};
return LinearProjection;
}(pixi_projection.AbstractProjection));
pixi_projection.LinearProjection = LinearProjection;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var webgl;
(function (webgl) {
var BatchBuffer = (function () {
function BatchBuffer(size) {
this.vertices = new ArrayBuffer(size);
this.float32View = new Float32Array(this.vertices);
this.uint32View = new Uint32Array(this.vertices);
}
BatchBuffer.prototype.destroy = function () {
this.vertices = null;
};
return BatchBuffer;
}());
webgl.BatchBuffer = BatchBuffer;
})(webgl = pixi_projection.webgl || (pixi_projection.webgl = {}));
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var webgl;
(function (webgl) {
var ObjectRenderer = PIXI.ObjectRenderer;
var settings = PIXI.settings;
var GLBuffer = PIXI.glCore.GLBuffer;
var premultiplyTint = PIXI.utils.premultiplyTint;
var premultiplyBlendMode = PIXI.utils.premultiplyBlendMode;
var TICK = 0;
var BatchGroup = (function () {
function BatchGroup() {
this.textures = [];
this.textureCount = 0;
this.ids = [];
this.size = 0;
this.start = 0;
this.blend = PIXI.BLEND_MODES.NORMAL;
this.uniforms = null;
}
return BatchGroup;
}());
webgl.BatchGroup = BatchGroup;
var MultiTextureSpriteRenderer = (function (_super) {
__extends(MultiTextureSpriteRenderer, _super);
function MultiTextureSpriteRenderer(renderer) {
var _this = _super.call(this, renderer) || this;
_this.shaderVert = '';
_this.shaderFrag = '';
_this.MAX_TEXTURES_LOCAL = 32;
_this.vertSize = 5;
_this.vertByteSize = _this.vertSize * 4;
_this.size = settings.SPRITE_BATCH_SIZE;
_this.currentIndex = 0;
_this.sprites = [];
_this.vertexBuffers = [];
_this.vaos = [];
_this.vaoMax = 2;
_this.vertexCount = 0;
_this.MAX_TEXTURES = 1;
_this.indices = pixi_projection.utils.createIndicesForQuads(_this.size);
_this.groups = [];
for (var k = 0; k < _this.size; k++) {
_this.groups[k] = new BatchGroup();
}
_this.vaoMax = 2;
_this.vertexCount = 0;
_this.renderer.on('prerender', _this.onPrerender, _this);
return _this;
}
MultiTextureSpriteRenderer.prototype.getUniforms = function (spr) {
return null;
};
MultiTextureSpriteRenderer.prototype.syncUniforms = function (obj) {
if (!obj)
return;
var sh = this.shader;
for (var key in obj) {
sh.uniforms[key] = obj[key];
}
};
MultiTextureSpriteRenderer.prototype.onContextChange = function () {
var gl = this.renderer.gl;
this.MAX_TEXTURES = Math.min(this.MAX_TEXTURES_LOCAL, this.renderer.plugins['sprite'].MAX_TEXTURES);
this.shader = webgl.generateMultiTextureShader(this.shaderVert, this.shaderFrag, gl, this.MAX_TEXTURES);
this.indexBuffer = GLBuffer.createIndexBuffer(gl, this.indices, gl.STATIC_DRAW);
this.renderer.bindVao(null);
var attrs = this.shader.attributes;
for (var i = 0; i < this.vaoMax; i++) {
var vertexBuffer = this.vertexBuffers[i] = GLBuffer.createVertexBuffer(gl, null, gl.STREAM_DRAW);
this.vaos[i] = this.createVao(vertexBuffer);
}
if (!this.buffers) {
this.buffers = [];
for (var i = 1; i <= pixi_projection.utils.nextPow2(this.size); i *= 2) {
this.buffers.push(new webgl.BatchBuffer(i * 4 * this.vertByteSize));
}
}
this.vao = this.vaos[0];
};
MultiTextureSpriteRenderer.prototype.onPrerender = function () {
this.vertexCount = 0;
};
MultiTextureSpriteRenderer.prototype.render = function (sprite) {
if (this.currentIndex >= this.size) {
this.flush();
}
if (!sprite._texture._uvs) {
return;
}
if (!sprite._texture.baseTexture) {
return;
}
this.sprites[this.currentIndex++] = sprite;
};
MultiTextureSpriteRenderer.prototype.flush = function () {
if (this.currentIndex === 0) {
return;
}
var gl = this.renderer.gl;
var MAX_TEXTURES = this.MAX_TEXTURES;
var np2 = pixi_projection.utils.nextPow2(this.currentIndex);
var log2 = pixi_projection.utils.log2(np2);
var buffer = this.buffers[log2];
var sprites = this.sprites;
var groups = this.groups;
var float32View = buffer.float32View;
var uint32View = buffer.uint32View;
var index = 0;
var nextTexture;
var currentTexture;
var currentUniforms = null;
var groupCount = 1;
var textureCount = 0;
var currentGroup = groups[0];
var vertexData;
var uvs;
var blendMode = premultiplyBlendMode[sprites[0]._texture.baseTexture.premultipliedAlpha ? 1 : 0][sprites[0].blendMode];
currentGroup.textureCount = 0;
currentGroup.start = 0;
currentGroup.blend = blendMode;
TICK++;
var i;
for (i = 0; i < this.currentIndex; ++i) {
var sprite = sprites[i];
nextTexture = sprite._texture.baseTexture;
var spriteBlendMode = premultiplyBlendMode[Number(nextTexture.premultipliedAlpha)][sprite.blendMode];
if (blendMode !== spriteBlendMode) {
blendMode = spriteBlendMode;
currentTexture = null;
textureCount = MAX_TEXTURES;
TICK++;
}
var uniforms = this.getUniforms(sprite);
if (currentUniforms !== uniforms) {
currentUniforms = uniforms;
currentTexture = null;
textureCount = MAX_TEXTURES;
TICK++;
}
if (currentTexture !== nextTexture) {
currentTexture = nextTexture;
if (nextTexture._enabled !== TICK) {
if (textureCount === MAX_TEXTURES) {
TICK++;
textureCount = 0;
currentGroup.size = i - currentGroup.start;
currentGroup = groups[groupCount++];
currentGroup.textureCount = 0;
currentGroup.blend = blendMode;
currentGroup.start = i;
currentGroup.uniforms = currentUniforms;
}
nextTexture._enabled = TICK;
nextTexture._virtalBoundId = textureCount;
currentGroup.textures[currentGroup.textureCount++] = nextTexture;
textureCount++;
}
}
var alpha = Math.min(sprite.worldAlpha, 1.0);
var argb = alpha < 1.0 && nextTexture.premultipliedAlpha ? premultiplyTint(sprite._tintRGB, alpha)
: sprite._tintRGB + (alpha * 255 << 24);
this.fillVertices(float32View, uint32View, index, sprite, argb, nextTexture._virtalBoundId);
index += this.vertSize * 4;
}
currentGroup.size = i - currentGroup.start;
if (!settings.CAN_UPLOAD_SAME_BUFFER) {
if (this.vaoMax <= this.vertexCount) {
this.vaoMax++;
var attrs = this.shader.attributes;
var vertexBuffer = this.vertexBuffers[this.vertexCount] = GLBuffer.createVertexBuffer(gl, null, gl.STREAM_DRAW);
this.vaos[this.vertexCount] = this.createVao(vertexBuffer);
}
this.renderer.bindVao(this.vaos[this.vertexCount]);
this.vertexBuffers[this.vertexCount].upload(buffer.vertices, 0, false);
this.vertexCount++;
}
else {
this.vertexBuffers[this.vertexCount].upload(buffer.vertices, 0, true);
}
currentUniforms = null;
for (i = 0; i < groupCount; i++) {
var group = groups[i];
var groupTextureCount = group.textureCount;
if (group.uniforms !== currentUniforms) {
this.syncUniforms(group.uniforms);
}
for (var j = 0; j < groupTextureCount; j++) {
this.renderer.bindTexture(group.textures[j], j, true);
group.textures[j]._virtalBoundId = -1;
var v = this.shader.uniforms.samplerSize;
if (v) {
v[0] = group.textures[j].realWidth;
v[1] = group.textures[j].realHeight;
this.shader.uniforms.samplerSize = v;
}
}
this.renderer.state.setBlendMode(group.blend);
gl.drawElements(gl.TRIANGLES, group.size * 6, gl.UNSIGNED_SHORT, group.start * 6 * 2);
}
this.currentIndex = 0;
};
MultiTextureSpriteRenderer.prototype.start = function () {
this.renderer.bindShader(this.shader);
if (settings.CAN_UPLOAD_SAME_BUFFER) {
this.renderer.bindVao(this.vaos[this.vertexCount]);
this.vertexBuffers[this.vertexCount].bind();
}
};
MultiTextureSpriteRenderer.prototype.stop = function () {
this.flush();
};
MultiTextureSpriteRenderer.prototype.destroy = function () {
for (var i = 0; i < this.vaoMax; i++) {
if (this.vertexBuffers[i]) {
this.vertexBuffers[i].destroy();
}
if (this.vaos[i]) {
this.vaos[i].destroy();
}
}
if (this.indexBuffer) {
this.indexBuffer.destroy();
}
this.renderer.off('prerender', this.onPrerender, this);
_super.prototype.destroy.call(this);
if (this.shader) {
this.shader.destroy();
this.shader = null;
}
this.vertexBuffers = null;
this.vaos = null;
this.indexBuffer = null;
this.indices = null;
this.sprites = null;
for (var i = 0; i < this.buffers.length; ++i) {
this.buffers[i].destroy();
}
};
return MultiTextureSpriteRenderer;
}(ObjectRenderer));
webgl.MultiTextureSpriteRenderer = MultiTextureSpriteRenderer;
})(webgl = pixi_projection.webgl || (pixi_projection.webgl = {}));
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var webgl;
(function (webgl) {
function generateMultiTextureShader(vertexSrc, fragmentSrc, gl, maxTextures) {
fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures + '');
fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures));
var shader = new PIXI.Shader(gl, vertexSrc, fragmentSrc);
var sampleValues = new Int32Array(maxTextures);
for (var i = 0; i < maxTextures; i++) {
sampleValues[i] = i;
}
shader.bind();
shader.uniforms.uSamplers = sampleValues;
return shader;
}
webgl.generateMultiTextureShader = generateMultiTextureShader;
function generateSampleSrc(maxTextures) {
var src = '';
src += '\n';
src += '\n';
for (var i = 0; i < maxTextures; i++) {
if (i > 0) {
src += '\nelse ';
}
if (i < maxTextures - 1) {
src += "if(textureId == " + i + ".0)";
}
src += '\n{';
src += "\n\tcolor = texture2D(uSamplers[" + i + "], textureCoord);";
src += '\n}';
}
src += '\n';
src += '\n';
return src;
}
})(webgl = pixi_projection.webgl || (pixi_projection.webgl = {}));
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var p = [new PIXI.Point(), new PIXI.Point(), new PIXI.Point(), new PIXI.Point()];
var a = [0, 0, 0, 0];
var Surface = (function () {
function Surface() {
this.surfaceID = "default";
this._updateID = 0;
this.vertexSrc = "";
this.fragmentSrc = "";
}
Surface.prototype.fillUniforms = function (uniforms) {
};
Surface.prototype.clear = function () {
};
Surface.prototype.boundsQuad = function (v, out, after) {
var minX = out[0], minY = out[1];
var maxX = out[0], maxY = out[1];
for (var i = 2; i < 8; i += 2) {
if (minX > out[i])
minX = out[i];
if (maxX < out[i])
maxX = out[i];
if (minY > out[i + 1])
minY = out[i + 1];
if (maxY < out[i + 1])
maxY = out[i + 1];
}
p[0].set(minX, minY);
this.apply(p[0], p[0]);
p[1].set(maxX, minY);
this.apply(p[1], p[1]);
p[2].set(maxX, maxY);
this.apply(p[2], p[2]);
p[3].set(minX, maxY);
this.apply(p[3], p[3]);
if (after) {
after.apply(p[0], p[0]);
after.apply(p[1], p[1]);
after.apply(p[2], p[2]);
after.apply(p[3], p[3]);
out[0] = p[0].x;
out[1] = p[0].y;
out[2] = p[1].x;
out[3] = p[1].y;
out[4] = p[2].x;
out[5] = p[2].y;
out[6] = p[3].x;
out[7] = p[3].y;
}
else {
for (var i = 1; i <= 3; i++) {
if (p[i].y < p[0].y || p[i].y == p[0].y && p[i].x < p[0].x) {
var t = p[0];
p[0] = p[i];
p[i] = t;
}
}
for (var i = 1; i <= 3; i++) {
a[i] = Math.atan2(p[i].y - p[0].y, p[i].x - p[0].x);
}
for (var i = 1; i <= 3; i++) {
for (var j = i + 1; j <= 3; j++) {
if (a[i] > a[j]) {
var t = p[i];
p[i] = p[j];
p[j] = t;
var t2 = a[i];
a[i] = a[j];
a[j] = t2;
}
}
}
out[0] = p[0].x;
out[1] = p[0].y;
out[2] = p[1].x;
out[3] = p[1].y;
out[4] = p[2].x;
out[5] = p[2].y;
out[6] = p[3].x;
out[7] = p[3].y;
if ((p[3].x - p[2].x) * (p[1].y - p[2].y) - (p[1].x - p[2].x) * (p[3].y - p[2].y) < 0) {
out[4] = p[3].x;
out[5] = p[3].y;
return;
}
}
};
return Surface;
}());
pixi_projection.Surface = Surface;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var tempMat = new PIXI.Matrix();
var tempRect = new PIXI.Rectangle();
var tempPoint = new PIXI.Point();
var BilinearSurface = (function (_super) {
__extends(BilinearSurface, _super);
function BilinearSurface() {
var _this = _super.call(this) || this;
_this.distortion = new PIXI.Point();
return _this;
}
BilinearSurface.prototype.clear = function () {
this.distortion.set(0, 0);
};
BilinearSurface.prototype.apply = function (pos, newPos) {
newPos = newPos || new PIXI.Point();
var d = this.distortion;
var m = pos.x * pos.y;
newPos.x = pos.x + d.x * m;
newPos.y = pos.y + d.y * m;
return newPos;
};
BilinearSurface.prototype.applyInverse = function (pos, newPos) {
newPos = newPos || new PIXI.Point();
var vx = pos.x, vy = pos.y;
var dx = this.distortion.x, dy = this.distortion.y;
if (dx == 0.0) {
newPos.x = vx;
newPos.y = vy / (1.0 + dy * vx);
}
else if (dy == 0.0) {
newPos.y = vy;
newPos.x = vx / (1.0 + dx * vy);
}
else {
var b = (vy * dx - vx * dy + 1.0) * 0.5 / dy;
var d = b * b + vx / dy;
if (d <= 0.00001) {
newPos.set(NaN, NaN);
return;
}
if (dy > 0.0) {
newPos.x = -b + Math.sqrt(d);
}
else {
newPos.x = -b - Math.sqrt(d);
}
newPos.y = (vx / newPos.x - 1.0) / dx;
}
return newPos;
};
BilinearSurface.prototype.mapSprite = function (sprite, quad, outTransform) {
var tex = sprite.texture;
tempRect.x = -sprite.anchor.x * tex.orig.width;
tempRect.y = -sprite.anchor.y * tex.orig.height;
tempRect.width = tex.orig.width;
tempRect.height = tex.orig.height;
return this.mapQuad(tempRect, quad, outTransform || sprite.transform);
};
BilinearSurface.prototype.mapQuad = function (rect, quad, outTransform) {
var ax = -rect.x / rect.width;
var ay = -rect.y / rect.height;
var ax2 = (1.0 - rect.x) / rect.width;
var ay2 = (1.0 - rect.y) / rect.height;
var up1x = (quad[0].x * (1.0 - ax) + quad[1].x * ax);
var up1y = (quad[0].y * (1.0 - ax) + quad[1].y * ax);
var up2x = (quad[0].x * (1.0 - ax2) + quad[1].x * ax2);
var up2y = (quad[0].y * (1.0 - ax2) + quad[1].y * ax2);
var down1x = (quad[3].x * (1.0 - ax) + quad[2].x * ax);
var down1y = (quad[3].y * (1.0 - ax) + quad[2].y * ax);
var down2x = (quad[3].x * (1.0 - ax2) + quad[2].x * ax2);
var down2y = (quad[3].y * (1.0 - ax2) + quad[2].y * ax2);
var x00 = up1x * (1.0 - ay) + down1x * ay;
var y00 = up1y * (1.0 - ay) + down1y * ay;
var x10 = up2x * (1.0 - ay) + down2x * ay;
var y10 = up2y * (1.0 - ay) + down2y * ay;
var x01 = up1x * (1.0 - ay2) + down1x * ay2;
var y01 = up1y * (1.0 - ay2) + down1y * ay2;
var x11 = up2x * (1.0 - ay2) + down2x * ay2;
var y11 = up2y * (1.0 - ay2) + down2y * ay2;
var mat = tempMat;
mat.tx = x00;
mat.ty = y00;
mat.a = x10 - x00;
mat.b = y10 - y00;
mat.c = x01 - x00;
mat.d = y01 - y00;
tempPoint.set(x11, y11);
mat.applyInverse(tempPoint, tempPoint);
this.distortion.set(tempPoint.x - 1, tempPoint.y - 1);
outTransform.setFromMatrix(mat);
return this;
};
BilinearSurface.prototype.fillUniforms = function (uniforms) {
uniforms.distortion = uniforms.distortion || new Float32Array([0, 0, 0, 0]);
var ax = Math.abs(this.distortion.x);
var ay = Math.abs(this.distortion.y);
uniforms.distortion[0] = ax * 10000 <= ay ? 0 : this.distortion.x;
uniforms.distortion[1] = ay * 10000 <= ax ? 0 : this.distortion.y;
uniforms.distortion[2] = 1.0 / uniforms.distortion[0];
uniforms.distortion[3] = 1.0 / uniforms.distortion[1];
};
return BilinearSurface;
}(pixi_projection.Surface));
pixi_projection.BilinearSurface = BilinearSurface;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Container2s = (function (_super) {
__extends(Container2s, _super);
function Container2s() {
var _this = _super.call(this) || this;
_this.proj = new pixi_projection.ProjectionSurface(_this.transform);
return _this;
}
Object.defineProperty(Container2s.prototype, "worldTransform", {
get: function () {
return this.proj;
},
enumerable: true,
configurable: true
});
return Container2s;
}(PIXI.Container));
pixi_projection.Container2s = Container2s;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var fun = PIXI.TransformStatic.prototype.updateTransform;
function transformHack(parentTransform) {
var proj = this.proj;
var pp = parentTransform.proj;
var ta = this;
if (!pp) {
fun.call(this, parentTransform);
proj._activeProjection = null;
return;
}
if (pp._surface) {
proj._activeProjection = pp;
this.updateLocalTransform();
this.localTransform.copy(this.worldTransform);
if (ta._parentID < 0) {
++ta._worldID;
}
return;
}
fun.call(this, parentTransform);
proj._activeProjection = pp._activeProjection;
}
var ProjectionSurface = (function (_super) {
__extends(ProjectionSurface, _super);
function ProjectionSurface(legacy, enable) {
var _this = _super.call(this, legacy, enable) || this;
_this._surface = null;
_this._activeProjection = null;
_this._currentSurfaceID = -1;
_this._currentLegacyID = -1;
_this._lastUniforms = null;
return _this;
}
Object.defineProperty(ProjectionSurface.prototype, "enabled", {
set: function (value) {
if (value === this._enabled) {
return;
}
this._enabled = value;
if (value) {
this.legacy.updateTransform = transformHack;
this.legacy._parentID = -1;
}
else {
this.legacy.updateTransform = PIXI.TransformStatic.prototype.updateTransform;
this.legacy._parentID = -1;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ProjectionSurface.prototype, "surface", {
get: function () {
return this._surface;
},
set: function (value) {
if (this._surface == value) {
return;
}
this._surface = value || null;
this.legacy._parentID = -1;
},
enumerable: true,
configurable: true
});
ProjectionSurface.prototype.applyPartial = function (pos, newPos) {
if (this._activeProjection !== null) {
newPos = this.legacy.worldTransform.apply(pos, newPos);
return this._activeProjection.surface.apply(newPos, newPos);
}
if (this._surface !== null) {
return this.surface.apply(pos, newPos);
}
return this.legacy.worldTransform.apply(pos, newPos);
};
ProjectionSurface.prototype.apply = function (pos, newPos) {
if (this._activeProjection !== null) {
newPos = this.legacy.worldTransform.apply(pos, newPos);
this._activeProjection.surface.apply(newPos, newPos);
return this._activeProjection.legacy.worldTransform.apply(newPos, newPos);
}
if (this._surface !== null) {
newPos = this.surface.apply(pos, newPos);
return this.legacy.worldTransform.apply(newPos, newPos);
}
return this.legacy.worldTransform.apply(pos, newPos);
};
ProjectionSurface.prototype.applyInverse = function (pos, newPos) {
if (this._activeProjection !== null) {
newPos = this._activeProjection.legacy.worldTransform.applyInverse(pos, newPos);
this._activeProjection._surface.applyInverse(newPos, newPos);
return this.legacy.worldTransform.applyInverse(newPos, newPos);
}
if (this._surface !== null) {
newPos = this.legacy.worldTransform.applyInverse(pos, newPos);
return this._surface.applyInverse(newPos, newPos);
}
return this.legacy.worldTransform.applyInverse(pos, newPos);
};
ProjectionSurface.prototype.mapBilinearSprite = function (sprite, quad) {
if (!(this._surface instanceof pixi_projection.BilinearSurface)) {
this.surface = new pixi_projection.BilinearSurface();
}
this.surface.mapSprite(sprite, quad, this.legacy);
};
ProjectionSurface.prototype.clear = function () {
if (this.surface) {
this.surface.clear();
}
};
Object.defineProperty(ProjectionSurface.prototype, "uniforms", {
get: function () {
if (this._currentLegacyID === this.legacy._worldID &&
this._currentSurfaceID === this.surface._updateID) {
return this._lastUniforms;
}
this._lastUniforms = this._lastUniforms || {};
this._lastUniforms.worldTransform = this.legacy.worldTransform.toArray(true);
this._surface.fillUniforms(this._lastUniforms);
return this._lastUniforms;
},
enumerable: true,
configurable: true
});
return ProjectionSurface;
}(pixi_projection.AbstractProjection));
pixi_projection.ProjectionSurface = ProjectionSurface;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var MultiTextureSpriteRenderer = pixi_projection.webgl.MultiTextureSpriteRenderer;
var SpriteBilinearRenderer = (function (_super) {
__extends(SpriteBilinearRenderer, _super);
function SpriteBilinearRenderer() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.size = 100;
_this.MAX_TEXTURES_LOCAL = 1;
_this.shaderVert = "precision highp float;\nattribute vec2 aVertexPosition;\nattribute vec3 aTrans1;\nattribute vec3 aTrans2;\nattribute vec4 aFrame;\nattribute vec4 aColor;\nattribute float aTextureId;\n\nuniform mat3 projectionMatrix;\nuniform mat3 worldTransform;\n\nvarying vec2 vTextureCoord;\nvarying vec3 vTrans1;\nvarying vec3 vTrans2;\nvarying vec4 vFrame;\nvarying vec4 vColor;\nvarying float vTextureId;\n\nvoid main(void){\n gl_Position.xyw = projectionMatrix * worldTransform * vec3(aVertexPosition, 1.0);\n gl_Position.z = 0.0;\n \n vTextureCoord = aVertexPosition;\n vTrans1 = aTrans1;\n vTrans2 = aTrans2;\n vTextureId = aTextureId;\n vColor = aColor;\n vFrame = aFrame;\n}\n";
_this.shaderFrag = "precision highp float;\nvarying vec2 vTextureCoord;\nvarying vec3 vTrans1;\nvarying vec3 vTrans2;\nvarying vec4 vFrame;\nvarying vec4 vColor;\nvarying float vTextureId;\n\nuniform sampler2D uSamplers[%count%];\nuniform vec2 samplerSize[%count%]; \nuniform vec4 distortion;\n\nvoid main(void){\nvec2 surface;\nvec2 surface2;\n\nfloat vx = vTextureCoord.x;\nfloat vy = vTextureCoord.y;\nfloat dx = distortion.x;\nfloat dy = distortion.y;\nfloat revx = distortion.z;\nfloat revy = distortion.w;\n\nif (distortion.x == 0.0) {\n surface.x = vx;\n surface.y = vy / (1.0 + dy * vx);\n surface2 = surface;\n} else\nif (distortion.y == 0.0) {\n surface.y = vy;\n surface.x = vx/ (1.0 + dx * vy);\n surface2 = surface;\n} else {\n float c = vy * dx - vx * dy;\n float b = (c + 1.0) * 0.5;\n float b2 = (-c + 1.0) * 0.5;\n float d = b * b + vx * dy;\n if (d < -0.00001) {\n discard;\n }\n d = sqrt(max(d, 0.0));\n surface.x = (- b + d) * revy;\n surface2.x = (- b - d) * revy;\n surface.y = (- b2 + d) * revx;\n surface2.y = (- b2 - d) * revx;\n}\n\nvec2 uv;\nuv.x = vTrans1.x * surface.x + vTrans1.y * surface.y + vTrans1.z;\nuv.y = vTrans2.x * surface.x + vTrans2.y * surface.y + vTrans2.z;\n\nvec2 pixels = uv * samplerSize[0];\n\nif (pixels.x < vFrame.x || pixels.x > vFrame.z ||\n pixels.y < vFrame.y || pixels.y > vFrame.w) {\n uv.x = vTrans1.x * surface2.x + vTrans1.y * surface2.y + vTrans1.z;\n uv.y = vTrans2.x * surface2.x + vTrans2.y * surface2.y + vTrans2.z;\n pixels = uv * samplerSize[0];\n \n if (pixels.x < vFrame.x || pixels.x > vFrame.z ||\n pixels.y < vFrame.y || pixels.y > vFrame.w) {\n discard;\n }\n}\n\nvec4 edge;\nedge.xy = clamp(pixels - vFrame.xy + 0.5, vec2(0.0, 0.0), vec2(1.0, 1.0));\nedge.zw = clamp(vFrame.zw - pixels + 0.5, vec2(0.0, 0.0), vec2(1.0, 1.0));\n\nfloat alpha = 1.0; //edge.x * edge.y * edge.z * edge.w;\nvec4 rColor = vColor * alpha;\n\nfloat textureId = floor(vTextureId+0.5);\nvec4 color;\nvec2 textureCoord = uv;\n%forloop%\ngl_FragColor = color * rColor;\n}";
_this.defUniforms = {
worldTransform: new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]),
distortion: new Float32Array([0, 0])
};
return _this;
}
SpriteBilinearRenderer.prototype.getUniforms = function (sprite) {
var proj = sprite.proj;
var shader = this.shader;
if (proj.surface !== null) {
return proj.uniforms;
}
if (proj._activeProjection !== null) {
return proj._activeProjection.uniforms;
}
return this.defUniforms;
};
SpriteBilinearRenderer.prototype.createVao = function (vertexBuffer) {
var attrs = this.shader.attributes;
this.vertSize = 14;
this.vertByteSize = this.vertSize * 4;
var gl = this.renderer.gl;
var vao = this.renderer.createVao()
.addIndex(this.indexBuffer)
.addAttribute(vertexBuffer, attrs.aVertexPosition, gl.FLOAT, false, this.vertByteSize, 0)
.addAttribute(vertexBuffer, attrs.aTrans1, gl.FLOAT, false, this.vertByteSize, 2 * 4)
.addAttribute(vertexBuffer, attrs.aTrans2, gl.FLOAT, false, this.vertByteSize, 5 * 4)
.addAttribute(vertexBuffer, attrs.aFrame, gl.FLOAT, false, this.vertByteSize, 8 * 4)
.addAttribute(vertexBuffer, attrs.aColor, gl.UNSIGNED_BYTE, true, this.vertByteSize, 12 * 4);
if (attrs.aTextureId) {
vao.addAttribute(vertexBuffer, attrs.aTextureId, gl.FLOAT, false, this.vertByteSize, 13 * 4);
}
return vao;
};
SpriteBilinearRenderer.prototype.fillVertices = function (float32View, uint32View, index, sprite, argb, textureId) {
var vertexData = sprite.vertexData;
var tex = sprite._texture;
var w = tex.orig.width;
var h = tex.orig.height;
var ax = sprite._anchor._x;
var ay = sprite._anchor._y;
var frame = tex._frame;
var aTrans = sprite.aTrans;
for (var i = 0; i < 4; i++) {
float32View[index] = vertexData[i * 2];
float32View[index + 1] = vertexData[i * 2 + 1];
float32View[index + 2] = aTrans.a;
float32View[index + 3] = aTrans.c;
float32View[index + 4] = aTrans.tx;
float32View[index + 5] = aTrans.b;
float32View[index + 6] = aTrans.d;
float32View[index + 7] = aTrans.ty;
float32View[index + 8] = frame.x;
float32View[index + 9] = frame.y;
float32View[index + 10] = frame.x + frame.width;
float32View[index + 11] = frame.y + frame.height;
uint32View[index + 12] = argb;
float32View[index + 13] = textureId;
index += 14;
}
};
return SpriteBilinearRenderer;
}(MultiTextureSpriteRenderer));
PIXI.WebGLRenderer.registerPlugin('sprite_bilinear', SpriteBilinearRenderer);
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var MultiTextureSpriteRenderer = pixi_projection.webgl.MultiTextureSpriteRenderer;
var SpriteStrangeRenderer = (function (_super) {
__extends(SpriteStrangeRenderer, _super);
function SpriteStrangeRenderer() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.size = 100;
_this.MAX_TEXTURES_LOCAL = 1;
_this.shaderVert = "precision highp float;\nattribute vec2 aVertexPosition;\nattribute vec3 aTrans1;\nattribute vec3 aTrans2;\nattribute vec4 aFrame;\nattribute vec4 aColor;\nattribute float aTextureId;\n\nuniform mat3 projectionMatrix;\nuniform mat3 worldTransform;\n\nvarying vec2 vTextureCoord;\nvarying vec3 vTrans1;\nvarying vec3 vTrans2;\nvarying vec4 vFrame;\nvarying vec4 vColor;\nvarying float vTextureId;\n\nvoid main(void){\n gl_Position.xyw = projectionMatrix * worldTransform * vec3(aVertexPosition, 1.0);\n gl_Position.z = 0.0;\n \n vTextureCoord = aVertexPosition;\n vTrans1 = aTrans1;\n vTrans2 = aTrans2;\n vTextureId = aTextureId;\n vColor = aColor;\n vFrame = aFrame;\n}\n";
_this.shaderFrag = "precision highp float;\nvarying vec2 vTextureCoord;\nvarying vec3 vTrans1;\nvarying vec3 vTrans2;\nvarying vec4 vFrame;\nvarying vec4 vColor;\nvarying float vTextureId;\n\nuniform sampler2D uSamplers[%count%];\nuniform vec2 samplerSize[%count%]; \nuniform vec4 params;\n\nvoid main(void){\nvec2 surface;\n\nfloat vx = vTextureCoord.x;\nfloat vy = vTextureCoord.y;\nfloat aleph = params.x;\nfloat bet = params.y;\nfloat A = params.z;\nfloat B = params.w;\n\nif (aleph == 0.0) {\n\tsurface.y = vy / (1.0 + vx * bet);\n\tsurface.x = vx;\n}\nelse if (bet == 0.0) {\n\tsurface.x = vx / (1.0 + vy * aleph);\n\tsurface.y = vy;\n} else {\n\tsurface.x = vx * (bet + 1.0) / (bet + 1.0 + vy * aleph);\n\tsurface.y = vy * (aleph + 1.0) / (aleph + 1.0 + vx * bet);\n}\n\nvec2 uv;\nuv.x = vTrans1.x * surface.x + vTrans1.y * surface.y + vTrans1.z;\nuv.y = vTrans2.x * surface.x + vTrans2.y * surface.y + vTrans2.z;\n\nvec2 pixels = uv * samplerSize[0];\n\nvec4 edge;\nedge.xy = clamp(pixels - vFrame.xy + 0.5, vec2(0.0, 0.0), vec2(1.0, 1.0));\nedge.zw = clamp(vFrame.zw - pixels + 0.5, vec2(0.0, 0.0), vec2(1.0, 1.0));\n\nfloat alpha = edge.x * edge.y * edge.z * edge.w;\nvec4 rColor = vColor * alpha;\n\nfloat textureId = floor(vTextureId+0.5);\nvec4 color;\nvec2 textureCoord = uv;\n%forloop%\ngl_FragColor = color * rColor;\n}";
_this.defUniforms = {
worldTransform: new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]),
distortion: new Float32Array([0, 0])
};
return _this;
}
SpriteStrangeRenderer.prototype.getUniforms = function (sprite) {
var proj = sprite.proj;
var shader = this.shader;
if (proj.surface !== null) {
return proj.uniforms;
}
if (proj._activeProjection !== null) {
return proj._activeProjection.uniforms;
}
return this.defUniforms;
};
SpriteStrangeRenderer.prototype.createVao = function (vertexBuffer) {
var attrs = this.shader.attributes;
this.vertSize = 14;
this.vertByteSize = this.vertSize * 4;
var gl = this.renderer.gl;
var vao = this.renderer.createVao()
.addIndex(this.indexBuffer)
.addAttribute(vertexBuffer, attrs.aVertexPosition, gl.FLOAT, false, this.vertByteSize, 0)
.addAttribute(vertexBuffer, attrs.aTrans1, gl.FLOAT, false, this.vertByteSize, 2 * 4)
.addAttribute(vertexBuffer, attrs.aTrans2, gl.FLOAT, false, this.vertByteSize, 5 * 4)
.addAttribute(vertexBuffer, attrs.aFrame, gl.FLOAT, false, this.vertByteSize, 8 * 4)
.addAttribute(vertexBuffer, attrs.aColor, gl.UNSIGNED_BYTE, true, this.vertByteSize, 12 * 4);
if (attrs.aTextureId) {
vao.addAttribute(vertexBuffer, attrs.aTextureId, gl.FLOAT, false, this.vertByteSize, 13 * 4);
}
return vao;
};
SpriteStrangeRenderer.prototype.fillVertices = function (float32View, uint32View, index, sprite, argb, textureId) {
var vertexData = sprite.vertexData;
var tex = sprite._texture;
var w = tex.orig.width;
var h = tex.orig.height;
var ax = sprite._anchor._x;
var ay = sprite._anchor._y;
var frame = tex._frame;
var aTrans = sprite.aTrans;
for (var i = 0; i < 4; i++) {
float32View[index] = vertexData[i * 2];
float32View[index + 1] = vertexData[i * 2 + 1];
float32View[index + 2] = aTrans.a;
float32View[index + 3] = aTrans.c;
float32View[index + 4] = aTrans.tx;
float32View[index + 5] = aTrans.b;
float32View[index + 6] = aTrans.d;
float32View[index + 7] = aTrans.ty;
float32View[index + 8] = frame.x;
float32View[index + 9] = frame.y;
float32View[index + 10] = frame.x + frame.width;
float32View[index + 11] = frame.y + frame.height;
uint32View[index + 12] = argb;
float32View[index + 13] = textureId;
index += 14;
}
};
return SpriteStrangeRenderer;
}(MultiTextureSpriteRenderer));
PIXI.WebGLRenderer.registerPlugin('sprite_strange', SpriteStrangeRenderer);
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var tempMat = new PIXI.Matrix();
var tempRect = new PIXI.Rectangle();
var tempPoint = new PIXI.Point();
var StrangeSurface = (function (_super) {
__extends(StrangeSurface, _super);
function StrangeSurface() {
var _this = _super.call(this) || this;
_this.params = [0, 0, NaN, NaN];
return _this;
}
StrangeSurface.prototype.clear = function () {
var p = this.params;
p[0] = 0;
p[1] = 0;
p[2] = NaN;
p[3] = NaN;
};
StrangeSurface.prototype.setAxisX = function (pos, factor, outTransform) {
var x = pos.x, y = pos.y;
var d = Math.sqrt(x * x + y * y);
var rot = outTransform.rotation;
if (rot !== 0) {
outTransform.skew._x -= rot;
outTransform.skew._y += rot;
outTransform.rotation = 0;
}
outTransform.skew.y = Math.atan2(y, x);
var p = this.params;
if (factor !== 0) {
p[2] = -d * factor;
}
else {
p[2] = NaN;
}
this._calc01();
};
StrangeSurface.prototype.setAxisY = function (pos, factor, outTransform) {
var x = pos.x, y = pos.y;
var d = Math.sqrt(x * x + y * y);
var rot = outTransform.rotation;
if (rot !== 0) {
outTransform.skew._x -= rot;
outTransform.skew._y += rot;
outTransform.rotation = 0;
}
outTransform.skew.x = -Math.atan2(y, x) + Math.PI / 2;
var p = this.params;
if (factor !== 0) {
p[3] = -d * factor;
}
else {
p[3] = NaN;
}
this._calc01();
};
StrangeSurface.prototype._calc01 = function () {
var p = this.params;
if (isNaN(p[2])) {
p[1] = 0;
if (isNaN(p[3])) {
p[0] = 0;
}
else {
p[0] = 1.0 / p[3];
}
}
else {
if (isNaN(p[3])) {
p[0] = 0;
p[1] = 1.0 / p[2];
}
else {
var d = 1.0 - p[2] * p[3];
p[0] = (1.0 - p[2]) / d;
p[1] = (1.0 - p[3]) / d;
}
}
};
StrangeSurface.prototype.apply = function (pos, newPos) {
newPos = newPos || new PIXI.Point();
var aleph = this.params[0], bet = this.params[1], A = this.params[2], B = this.params[3];
var u = pos.x, v = pos.y;
if (aleph === 0.0) {
newPos.y = v * (1 + u * bet);
newPos.x = u;
}
else if (bet === 0.0) {
newPos.x = u * (1 + v * aleph);
newPos.y = v;
}
else {
var D = A * B - v * u;
newPos.x = A * u * (B + v) / D;
newPos.y = B * v * (A + u) / D;
}
return newPos;
};
StrangeSurface.prototype.applyInverse = function (pos, newPos) {
newPos = newPos || new PIXI.Point();
var aleph = this.params[0], bet = this.params[1], A = this.params[2], B = this.params[3];
var x = pos.x, y = pos.y;
if (aleph === 0.0) {
newPos.y = y / (1 + x * bet);
newPos.x = x;
}
else if (bet === 0.0) {
newPos.x = x * (1 + y * aleph);
newPos.y = y;
}
else {
newPos.x = x * (bet + 1) / (bet + 1 + y * aleph);
newPos.y = y * (aleph + 1) / (aleph + 1 + x * bet);
}
return newPos;
};
StrangeSurface.prototype.mapSprite = function (sprite, quad, outTransform) {
var tex = sprite.texture;
tempRect.x = -sprite.anchor.x * tex.orig.width;
tempRect.y = -sprite.anchor.y * tex.orig.height;
tempRect.width = tex.orig.width;
tempRect.height = tex.orig.height;
return this.mapQuad(tempRect, quad, outTransform || sprite.transform);
};
StrangeSurface.prototype.mapQuad = function (rect, quad, outTransform) {
var ax = -rect.x / rect.width;
var ay = -rect.y / rect.height;
var ax2 = (1.0 - rect.x) / rect.width;
var ay2 = (1.0 - rect.y) / rect.height;
var up1x = (quad[0].x * (1.0 - ax) + quad[1].x * ax);
var up1y = (quad[0].y * (1.0 - ax) + quad[1].y * ax);
var up2x = (quad[0].x * (1.0 - ax2) + quad[1].x * ax2);
var up2y = (quad[0].y * (1.0 - ax2) + quad[1].y * ax2);
var down1x = (quad[3].x * (1.0 - ax) + quad[2].x * ax);
var down1y = (quad[3].y * (1.0 - ax) + quad[2].y * ax);
var down2x = (quad[3].x * (1.0 - ax2) + quad[2].x * ax2);
var down2y = (quad[3].y * (1.0 - ax2) + quad[2].y * ax2);
var x00 = up1x * (1.0 - ay) + down1x * ay;
var y00 = up1y * (1.0 - ay) + down1y * ay;
var x10 = up2x * (1.0 - ay) + down2x * ay;
var y10 = up2y * (1.0 - ay) + down2y * ay;
var x01 = up1x * (1.0 - ay2) + down1x * ay2;
var y01 = up1y * (1.0 - ay2) + down1y * ay2;
var x11 = up2x * (1.0 - ay2) + down2x * ay2;
var y11 = up2y * (1.0 - ay2) + down2y * ay2;
var mat = tempMat;
mat.tx = x00;
mat.ty = y00;
mat.a = x10 - x00;
mat.b = y10 - y00;
mat.c = x01 - x00;
mat.d = y01 - y00;
tempPoint.set(x11, y11);
mat.applyInverse(tempPoint, tempPoint);
outTransform.setFromMatrix(mat);
return this;
};
StrangeSurface.prototype.fillUniforms = function (uniforms) {
var params = this.params;
var distortion = uniforms.params || new Float32Array([0, 0, 0, 0]);
uniforms.params = distortion;
distortion[0] = params[0];
distortion[1] = params[1];
distortion[2] = params[2];
distortion[3] = params[3];
};
return StrangeSurface;
}(pixi_projection.Surface));
pixi_projection.StrangeSurface = StrangeSurface;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Sprite2s = (function (_super) {
__extends(Sprite2s, _super);
function Sprite2s(texture) {
var _this = _super.call(this, texture) || this;
_this.aTrans = new PIXI.Matrix();
_this.proj = new pixi_projection.ProjectionSurface(_this.transform);
_this.pluginName = 'sprite_bilinear';
return _this;
}
Sprite2s.prototype._calculateBounds = function () {
this.calculateTrimmedVertices();
this._bounds.addQuad(this.vertexTrimmedData);
};
Sprite2s.prototype.calculateVertices = function () {
var wid = this.transform._worldID;
var tuid = this._texture._updateID;
if (this._transformID === wid && this._textureID === tuid) {
return;
}
this._transformID = wid;
this._textureID = tuid;
var texture = this._texture;
var vertexData = this.vertexData;
var trim = texture.trim;
var orig = texture.orig;
var anchor = this._anchor;
var w0 = 0;
var w1 = 0;
var h0 = 0;
var h1 = 0;
if (trim) {
w1 = trim.x - (anchor._x * orig.width);
w0 = w1 + trim.width;
h1 = trim.y - (anchor._y * orig.height);
h0 = h1 + trim.height;
}
else {
w1 = -anchor._x * orig.width;
w0 = w1 + orig.width;
h1 = -anchor._y * orig.height;
h0 = h1 + orig.height;
}
if (this.proj._surface) {
vertexData[0] = w1;
vertexData[1] = h1;
vertexData[2] = w0;
vertexData[3] = h1;
vertexData[4] = w0;
vertexData[5] = h0;
vertexData[6] = w1;
vertexData[7] = h0;
this.proj._surface.boundsQuad(vertexData, vertexData);
}
else {
var wt = this.transform.worldTransform;
var a = wt.a;
var b = wt.b;
var c = wt.c;
var d = wt.d;
var tx = wt.tx;
var ty = wt.ty;
vertexData[0] = (a * w1) + (c * h1) + tx;
vertexData[1] = (d * h1) + (b * w1) + ty;
vertexData[2] = (a * w0) + (c * h1) + tx;
vertexData[3] = (d * h1) + (b * w0) + ty;
vertexData[4] = (a * w0) + (c * h0) + tx;
vertexData[5] = (d * h0) + (b * w0) + ty;
vertexData[6] = (a * w1) + (c * h0) + tx;
vertexData[7] = (d * h0) + (b * w1) + ty;
if (this.proj._activeProjection) {
this.proj._activeProjection.surface.boundsQuad(vertexData, vertexData);
}
}
if (!texture.transform) {
texture.transform = new PIXI.TextureMatrix(texture);
}
texture.transform.update();
var aTrans = this.aTrans;
aTrans.set(orig.width, 0, 0, orig.height, w1, h1);
if (this.proj._surface === null) {
aTrans.prepend(this.transform.worldTransform);
}
aTrans.invert();
aTrans.prepend(texture.transform.mapCoord);
};
Sprite2s.prototype.calculateTrimmedVertices = function () {
var wid = this.transform._worldID;
var tuid = this._texture._updateID;
if (!this.vertexTrimmedData) {
this.vertexTrimmedData = new Float32Array(8);
}
else if (this._transformTrimmedID === wid && this._textureTrimmedID === tuid) {
return;
}
this._transformTrimmedID = wid;
this._textureTrimmedID = tuid;
var texture = this._texture;
var vertexData = this.vertexTrimmedData;
var orig = texture.orig;
var anchor = this._anchor;
var w1 = -anchor._x * orig.width;
var w0 = w1 + orig.width;
var h1 = -anchor._y * orig.height;
var h0 = h1 + orig.height;
if (this.proj._surface) {
vertexData[0] = w1;
vertexData[1] = h1;
vertexData[2] = w0;
vertexData[3] = h1;
vertexData[4] = w0;
vertexData[5] = h0;
vertexData[6] = w1;
vertexData[7] = h0;
this.proj._surface.boundsQuad(vertexData, vertexData, this.transform.worldTransform);
}
else {
var wt = this.transform.worldTransform;
var a = wt.a;
var b = wt.b;
var c = wt.c;
var d = wt.d;
var tx = wt.tx;
var ty = wt.ty;
vertexData[0] = (a * w1) + (c * h1) + tx;
vertexData[1] = (d * h1) + (b * w1) + ty;
vertexData[2] = (a * w0) + (c * h1) + tx;
vertexData[3] = (d * h1) + (b * w0) + ty;
vertexData[4] = (a * w0) + (c * h0) + tx;
vertexData[5] = (d * h0) + (b * w0) + ty;
vertexData[6] = (a * w1) + (c * h0) + tx;
vertexData[7] = (d * h0) + (b * w1) + ty;
if (this.proj._activeProjection) {
this.proj._activeProjection.surface.boundsQuad(vertexData, vertexData, this.proj._activeProjection.legacy.worldTransform);
}
}
};
Object.defineProperty(Sprite2s.prototype, "worldTransform", {
get: function () {
return this.proj;
},
enumerable: true,
configurable: true
});
return Sprite2s;
}(PIXI.Sprite));
pixi_projection.Sprite2s = Sprite2s;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Text2s = (function (_super) {
__extends(Text2s, _super);
function Text2s(text, style, canvas) {
var _this = _super.call(this, text, style, canvas) || this;
_this.aTrans = new PIXI.Matrix();
_this.proj = new pixi_projection.ProjectionSurface(_this.transform);
_this.pluginName = 'sprite_bilinear';
return _this;
}
Object.defineProperty(Text2s.prototype, "worldTransform", {
get: function () {
return this.proj;
},
enumerable: true,
configurable: true
});
return Text2s;
}(PIXI.Text));
pixi_projection.Text2s = Text2s;
Text2s.prototype.calculateVertices = pixi_projection.Sprite2s.prototype.calculateVertices;
Text2s.prototype.calculateTrimmedVertices = pixi_projection.Sprite2s.prototype.calculateTrimmedVertices;
Text2s.prototype._calculateBounds = pixi_projection.Sprite2s.prototype._calculateBounds;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
PIXI.Sprite.prototype.convertTo2s = function () {
if (this.proj)
return;
this.pluginName = 'sprite_bilinear';
this.aTrans = new PIXI.Matrix();
this.calculateVertices = pixi_projection.Sprite2s.prototype.calculateVertices;
this.calculateTrimmedVertices = pixi_projection.Sprite2s.prototype.calculateTrimmedVertices;
this._calculateBounds = pixi_projection.Sprite2s.prototype._calculateBounds;
PIXI.Container.prototype.convertTo2s.call(this);
};
PIXI.Container.prototype.convertTo2s = function () {
if (this.proj)
return;
this.proj = new pixi_projection.Projection2d(this.transform);
Object.defineProperty(this, "worldTransform", {
get: function () {
return this.proj;
},
enumerable: true,
configurable: true
});
};
PIXI.Container.prototype.convertSubtreeTo2s = function () {
this.convertTo2s();
for (var i = 0; i < this.children.length; i++) {
this.children[i].convertSubtreeTo2s();
}
};
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
function container2dWorldTransform() {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
}
pixi_projection.container2dWorldTransform = container2dWorldTransform;
var Container2d = (function (_super) {
__extends(Container2d, _super);
function Container2d() {
var _this = _super.call(this) || this;
_this.proj = new pixi_projection.Projection2d(_this.transform);
return _this;
}
Container2d.prototype.toLocal = function (position, from, point, skipUpdate, step) {
if (step === void 0) { step = pixi_projection.TRANSFORM_STEP.ALL; }
if (from) {
position = from.toGlobal(position, point, skipUpdate);
}
if (!skipUpdate) {
this._recursivePostUpdateTransform();
}
if (step >= pixi_projection.TRANSFORM_STEP.PROJ) {
if (!skipUpdate) {
this.displayObjectUpdateTransform();
}
if (this.proj.affine) {
return this.transform.worldTransform.applyInverse(point, point);
}
return this.proj.world.applyInverse(point, point);
}
if (this.parent) {
point = this.parent.worldTransform.applyInverse(position, point);
}
else {
point.copy(position);
}
if (step === pixi_projection.TRANSFORM_STEP.NONE) {
return point;
}
return this.transform.localTransform.applyInverse(point, point);
};
Object.defineProperty(Container2d.prototype, "worldTransform", {
get: function () {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
},
enumerable: true,
configurable: true
});
return Container2d;
}(PIXI.Container));
pixi_projection.Container2d = Container2d;
pixi_projection.container2dToLocal = Container2d.prototype.toLocal;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Point = PIXI.Point;
var mat3id = [1, 0, 0, 0, 1, 0, 0, 0, 1];
var AFFINE;
(function (AFFINE) {
AFFINE[AFFINE["NONE"] = 0] = "NONE";
AFFINE[AFFINE["FREE"] = 1] = "FREE";
AFFINE[AFFINE["AXIS_X"] = 2] = "AXIS_X";
AFFINE[AFFINE["AXIS_Y"] = 3] = "AXIS_Y";
AFFINE[AFFINE["POINT"] = 4] = "POINT";
})(AFFINE = pixi_projection.AFFINE || (pixi_projection.AFFINE = {}));
var Matrix2d = (function () {
function Matrix2d(backingArray) {
this.floatArray = null;
this.mat3 = new Float64Array(backingArray || mat3id);
}
Object.defineProperty(Matrix2d.prototype, "a", {
get: function () {
return this.mat3[0] / this.mat3[8];
},
set: function (value) {
this.mat3[0] = value * this.mat3[8];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix2d.prototype, "b", {
get: function () {
return this.mat3[1] / this.mat3[8];
},
set: function (value) {
this.mat3[1] = value * this.mat3[8];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix2d.prototype, "c", {
get: function () {
return this.mat3[3] / this.mat3[8];
},
set: function (value) {
this.mat3[3] = value * this.mat3[8];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix2d.prototype, "d", {
get: function () {
return this.mat3[4] / this.mat3[8];
},
set: function (value) {
this.mat3[4] = value * this.mat3[8];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix2d.prototype, "tx", {
get: function () {
return this.mat3[6] / this.mat3[8];
},
set: function (value) {
this.mat3[6] = value * this.mat3[8];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix2d.prototype, "ty", {
get: function () {
return this.mat3[7] / this.mat3[8];
},
set: function (value) {
this.mat3[7] = value * this.mat3[8];
},
enumerable: true,
configurable: true
});
Matrix2d.prototype.set = function (a, b, c, d, tx, ty) {
var mat3 = this.mat3;
mat3[0] = a;
mat3[1] = b;
mat3[2] = 0;
mat3[3] = c;
mat3[4] = d;
mat3[5] = 0;
mat3[6] = tx;
mat3[7] = ty;
mat3[8] = 1;
return this;
};
Matrix2d.prototype.toArray = function (transpose, out) {
if (!this.floatArray) {
this.floatArray = new Float32Array(9);
}
var array = out || this.floatArray;
var mat3 = this.mat3;
if (transpose) {
array[0] = mat3[0];
array[1] = mat3[1];
array[2] = mat3[2];
array[3] = mat3[3];
array[4] = mat3[4];
array[5] = mat3[5];
array[6] = mat3[6];
array[7] = mat3[7];
array[8] = mat3[8];
}
else {
array[0] = mat3[0];
array[1] = mat3[3];
array[2] = mat3[6];
array[3] = mat3[1];
array[4] = mat3[4];
array[5] = mat3[7];
array[6] = mat3[2];
array[7] = mat3[5];
array[8] = mat3[8];
}
return array;
};
Matrix2d.prototype.apply = function (pos, newPos) {
newPos = newPos || new PIXI.Point();
var mat3 = this.mat3;
var x = pos.x;
var y = pos.y;
var z = 1.0 / (mat3[2] * x + mat3[5] * y + mat3[8]);
newPos.x = z * (mat3[0] * x + mat3[3] * y + mat3[6]);
newPos.y = z * (mat3[1] * x + mat3[4] * y + mat3[7]);
return newPos;
};
Matrix2d.prototype.translate = function (tx, ty) {
var mat3 = this.mat3;
mat3[0] += tx * mat3[2];
mat3[1] += ty * mat3[2];
mat3[3] += tx * mat3[5];
mat3[4] += ty * mat3[5];
mat3[6] += tx * mat3[8];
mat3[7] += ty * mat3[8];
return this;
};
Matrix2d.prototype.scale = function (x, y) {
var mat3 = this.mat3;
mat3[0] *= x;
mat3[1] *= y;
mat3[3] *= x;
mat3[4] *= y;
mat3[6] *= x;
mat3[7] *= y;
return this;
};
Matrix2d.prototype.scaleAndTranslate = function (scaleX, scaleY, tx, ty) {
var mat3 = this.mat3;
mat3[0] = scaleX * mat3[0] + tx * mat3[2];
mat3[1] = scaleY * mat3[1] + ty * mat3[2];
mat3[3] = scaleX * mat3[3] + tx * mat3[5];
mat3[4] = scaleY * mat3[4] + ty * mat3[5];
mat3[6] = scaleX * mat3[6] + tx * mat3[8];
mat3[7] = scaleY * mat3[7] + ty * mat3[8];
};
Matrix2d.prototype.applyInverse = function (pos, newPos) {
newPos = newPos || new Point();
var a = this.mat3;
var x = pos.x;
var y = pos.y;
var a00 = a[0], a01 = a[3], a02 = a[6], a10 = a[1], a11 = a[4], a12 = a[7], a20 = a[2], a21 = a[5], a22 = a[8];
var newX = (a22 * a11 - a12 * a21) * x + (-a22 * a01 + a02 * a21) * y + (a12 * a01 - a02 * a11);
var newY = (-a22 * a10 + a12 * a20) * x + (a22 * a00 - a02 * a20) * y + (-a12 * a00 + a02 * a10);
var newZ = (a21 * a10 - a11 * a20) * x + (-a21 * a00 + a01 * a20) * y + (a11 * a00 - a01 * a10);
newPos.x = newX / newZ;
newPos.y = newY / newZ;
return newPos;
};
Matrix2d.prototype.invert = function () {
var a = this.mat3;
var a00 = a[0], a01 = a[1], a02 = a[2], a10 = a[3], a11 = a[4], a12 = a[5], a20 = a[6], a21 = a[7], a22 = a[8], b01 = a22 * a11 - a12 * a21, b11 = -a22 * a10 + a12 * a20, b21 = a21 * a10 - a11 * a20;
var det = a00 * b01 + a01 * b11 + a02 * b21;
if (!det) {
return this;
}
det = 1.0 / det;
a[0] = b01 * det;
a[1] = (-a22 * a01 + a02 * a21) * det;
a[2] = (a12 * a01 - a02 * a11) * det;
a[3] = b11 * det;
a[4] = (a22 * a00 - a02 * a20) * det;
a[5] = (-a12 * a00 + a02 * a10) * det;
a[6] = b21 * det;
a[7] = (-a21 * a00 + a01 * a20) * det;
a[8] = (a11 * a00 - a01 * a10) * det;
return this;
};
Matrix2d.prototype.identity = function () {
var mat3 = this.mat3;
mat3[0] = 1;
mat3[1] = 0;
mat3[2] = 0;
mat3[3] = 0;
mat3[4] = 1;
mat3[5] = 0;
mat3[6] = 0;
mat3[7] = 0;
mat3[8] = 1;
return this;
};
Matrix2d.prototype.clone = function () {
return new Matrix2d(this.mat3);
};
Matrix2d.prototype.copyTo = function (matrix) {
var mat3 = this.mat3;
var ar2 = matrix.mat3;
ar2[0] = mat3[0];
ar2[1] = mat3[1];
ar2[2] = mat3[2];
ar2[3] = mat3[3];
ar2[4] = mat3[4];
ar2[5] = mat3[5];
ar2[6] = mat3[6];
ar2[7] = mat3[7];
ar2[8] = mat3[8];
return matrix;
};
Matrix2d.prototype.copy = function (matrix, affine) {
var mat3 = this.mat3;
var d = 1.0 / mat3[8];
var tx = mat3[6] * d, ty = mat3[7] * d;
matrix.a = (mat3[0] - mat3[2] * tx) * d;
matrix.b = (mat3[1] - mat3[2] * ty) * d;
matrix.c = (mat3[3] - mat3[5] * tx) * d;
matrix.d = (mat3[4] - mat3[5] * ty) * d;
matrix.tx = tx;
matrix.ty = ty;
if (affine >= 2) {
if (affine === AFFINE.POINT) {
matrix.a = 1;
matrix.b = 0;
matrix.c = 0;
matrix.d = 1;
}
else if (affine === AFFINE.AXIS_X) {
matrix.c = -matrix.b;
matrix.d = matrix.a;
}
else if (affine === AFFINE.AXIS_Y) {
matrix.a = matrix.d;
matrix.c = -matrix.b;
}
}
};
Matrix2d.prototype.copyFrom = function (matrix) {
var mat3 = this.mat3;
mat3[0] = matrix.a;
mat3[1] = matrix.b;
mat3[2] = 0;
mat3[3] = matrix.c;
mat3[4] = matrix.d;
mat3[5] = 0;
mat3[6] = matrix.tx;
mat3[7] = matrix.ty;
mat3[8] = 1.0;
return this;
};
Matrix2d.prototype.setToMultLegacy = function (pt, lt) {
var out = this.mat3;
var b = lt.mat3;
var a00 = pt.a, a01 = pt.b, a10 = pt.c, a11 = pt.d, a20 = pt.tx, a21 = pt.ty, b00 = b[0], b01 = b[1], b02 = b[2], b10 = b[3], b11 = b[4], b12 = b[5], b20 = b[6], b21 = b[7], b22 = b[8];
out[0] = b00 * a00 + b01 * a10 + b02 * a20;
out[1] = b00 * a01 + b01 * a11 + b02 * a21;
out[2] = b02;
out[3] = b10 * a00 + b11 * a10 + b12 * a20;
out[4] = b10 * a01 + b11 * a11 + b12 * a21;
out[5] = b12;
out[6] = b20 * a00 + b21 * a10 + b22 * a20;
out[7] = b20 * a01 + b21 * a11 + b22 * a21;
out[8] = b22;
return this;
};
Matrix2d.prototype.setToMultLegacy2 = function (pt, lt) {
var out = this.mat3;
var a = pt.mat3;
var a00 = a[0], a01 = a[1], a02 = a[2], a10 = a[3], a11 = a[4], a12 = a[5], a20 = a[6], a21 = a[7], a22 = a[8], b00 = lt.a, b01 = lt.b, b10 = lt.c, b11 = lt.d, b20 = lt.tx, b21 = lt.ty;
out[0] = b00 * a00 + b01 * a10;
out[1] = b00 * a01 + b01 * a11;
out[2] = b00 * a02 + b01 * a12;
out[3] = b10 * a00 + b11 * a10;
out[4] = b10 * a01 + b11 * a11;
out[5] = b10 * a02 + b11 * a12;
out[6] = b20 * a00 + b21 * a10 + a20;
out[7] = b20 * a01 + b21 * a11 + a21;
out[8] = b20 * a02 + b21 * a12 + a22;
return this;
};
Matrix2d.prototype.setToMult = function (pt, lt) {
var out = this.mat3;
var a = pt.mat3, b = lt.mat3;
var a00 = a[0], a01 = a[1], a02 = a[2], a10 = a[3], a11 = a[4], a12 = a[5], a20 = a[6], a21 = a[7], a22 = a[8], b00 = b[0], b01 = b[1], b02 = b[2], b10 = b[3], b11 = b[4], b12 = b[5], b20 = b[6], b21 = b[7], b22 = b[8];
out[0] = b00 * a00 + b01 * a10 + b02 * a20;
out[1] = b00 * a01 + b01 * a11 + b02 * a21;
out[2] = b00 * a02 + b01 * a12 + b02 * a22;
out[3] = b10 * a00 + b11 * a10 + b12 * a20;
out[4] = b10 * a01 + b11 * a11 + b12 * a21;
out[5] = b10 * a02 + b11 * a12 + b12 * a22;
out[6] = b20 * a00 + b21 * a10 + b22 * a20;
out[7] = b20 * a01 + b21 * a11 + b22 * a21;
out[8] = b20 * a02 + b21 * a12 + b22 * a22;
return this;
};
Matrix2d.prototype.prepend = function (lt) {
if (lt.mat3) {
this.setToMult(lt, this);
}
else {
this.setToMultLegacy(lt, this);
}
};
Matrix2d.IDENTITY = new Matrix2d();
Matrix2d.TEMP_MATRIX = new Matrix2d();
return Matrix2d;
}());
pixi_projection.Matrix2d = Matrix2d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var t0 = new PIXI.Point();
var tt = [new PIXI.Point(), new PIXI.Point(), new PIXI.Point(), new PIXI.Point()];
var tempRect = new PIXI.Rectangle();
var tempMat = new pixi_projection.Matrix2d();
var Projection2d = (function (_super) {
__extends(Projection2d, _super);
function Projection2d(legacy, enable) {
var _this = _super.call(this, legacy, enable) || this;
_this.matrix = new pixi_projection.Matrix2d();
_this.pivot = new PIXI.ObservablePoint(_this.onChange, _this, 0, 0);
_this.reverseLocalOrder = false;
_this.local = new pixi_projection.Matrix2d();
_this.world = new pixi_projection.Matrix2d();
return _this;
}
Projection2d.prototype.onChange = function () {
var pivot = this.pivot;
var mat3 = this.matrix.mat3;
mat3[6] = -(pivot._x * mat3[0] + pivot._y * mat3[3]);
mat3[7] = -(pivot._x * mat3[1] + pivot._y * mat3[4]);
this._projID++;
};
Projection2d.prototype.setAxisX = function (p, factor) {
if (factor === void 0) { factor = 1; }
var x = p.x, y = p.y;
var d = Math.sqrt(x * x + y * y);
var mat3 = this.matrix.mat3;
mat3[0] = x / d;
mat3[1] = y / d;
mat3[2] = factor / d;
this.onChange();
};
Projection2d.prototype.setAxisY = function (p, factor) {
if (factor === void 0) { factor = 1; }
var x = p.x, y = p.y;
var d = Math.sqrt(x * x + y * y);
var mat3 = this.matrix.mat3;
mat3[3] = x / d;
mat3[4] = y / d;
mat3[5] = factor / d;
this.onChange();
};
Projection2d.prototype.mapSprite = function (sprite, quad) {
var tex = sprite.texture;
tempRect.x = -sprite.anchor.x * tex.orig.width;
tempRect.y = -sprite.anchor.y * tex.orig.height;
tempRect.width = tex.orig.width;
tempRect.height = tex.orig.height;
return this.mapQuad(tempRect, quad);
};
Projection2d.prototype.mapQuad = function (rect, p) {
tt[0].set(rect.x, rect.y);
tt[1].set(rect.x + rect.width, rect.y);
tt[2].set(rect.x + rect.width, rect.y + rect.height);
tt[3].set(rect.x, rect.y + rect.height);
var k1 = 1, k2 = 2, k3 = 3;
var f = pixi_projection.utils.getIntersectionFactor(p[0], p[2], p[1], p[3], t0);
if (f !== 0) {
k1 = 1;
k2 = 3;
k3 = 2;
}
else {
return;
}
var d0 = Math.sqrt((p[0].x - t0.x) * (p[0].x - t0.x) + (p[0].y - t0.y) * (p[0].y - t0.y));
var d1 = Math.sqrt((p[k1].x - t0.x) * (p[k1].x - t0.x) + (p[k1].y - t0.y) * (p[k1].y - t0.y));
var d2 = Math.sqrt((p[k2].x - t0.x) * (p[k2].x - t0.x) + (p[k2].y - t0.y) * (p[k2].y - t0.y));
var d3 = Math.sqrt((p[k3].x - t0.x) * (p[k3].x - t0.x) + (p[k3].y - t0.y) * (p[k3].y - t0.y));
var q0 = (d0 + d3) / d3;
var q1 = (d1 + d2) / d2;
var q2 = (d1 + d2) / d1;
var mat3 = this.matrix.mat3;
mat3[0] = tt[0].x * q0;
mat3[1] = tt[0].y * q0;
mat3[2] = q0;
mat3[3] = tt[k1].x * q1;
mat3[4] = tt[k1].y * q1;
mat3[5] = q1;
mat3[6] = tt[k2].x * q2;
mat3[7] = tt[k2].y * q2;
mat3[8] = q2;
this.matrix.invert();
mat3 = tempMat.mat3;
mat3[0] = p[0].x;
mat3[1] = p[0].y;
mat3[2] = 1;
mat3[3] = p[k1].x;
mat3[4] = p[k1].y;
mat3[5] = 1;
mat3[6] = p[k2].x;
mat3[7] = p[k2].y;
mat3[8] = 1;
this.matrix.setToMult(tempMat, this.matrix);
this._projID++;
};
Projection2d.prototype.updateLocalTransform = function (lt) {
if (this._projID !== 0) {
if (this.reverseLocalOrder) {
this.local.setToMultLegacy2(this.matrix, lt);
}
else {
this.local.setToMultLegacy(lt, this.matrix);
}
}
else {
this.local.copyFrom(lt);
}
};
Projection2d.prototype.clear = function () {
_super.prototype.clear.call(this);
this.matrix.identity();
this.pivot.set(0, 0);
};
return Projection2d;
}(pixi_projection.LinearProjection));
pixi_projection.Projection2d = Projection2d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Mesh2d = (function (_super) {
__extends(Mesh2d, _super);
function Mesh2d(texture, vertices, uvs, indices, drawMode) {
var _this = _super.call(this, texture, vertices, uvs, indices, drawMode) || this;
_this.proj = new pixi_projection.Projection2d(_this.transform);
_this.pluginName = 'mesh2d';
return _this;
}
Mesh2d.prototype.toLocal = function (position, from, point, skipUpdate, step) {
if (step === void 0) { step = pixi_projection.TRANSFORM_STEP.ALL; }
return pixi_projection.container2dToLocal.call(this, position, from, point, skipUpdate, step);
};
Object.defineProperty(Mesh2d.prototype, "worldTransform", {
get: function () {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
},
enumerable: true,
configurable: true
});
return Mesh2d;
}(PIXI.mesh.Mesh));
pixi_projection.Mesh2d = Mesh2d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var shaderVert = "precision highp float;\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\nuniform mat3 translationMatrix;\nuniform mat3 uTransform;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void)\n{\n gl_Position.xyw = projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0);\n gl_Position.z = 0.0;\n\n vTextureCoord = (uTransform * vec3(aTextureCoord, 1.0)).xy;\n}\n";
var shaderFrag = "\nvarying vec2 vTextureCoord;\nuniform vec4 uColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = texture2D(uSampler, vTextureCoord) * uColor;\n}";
var Mesh2dRenderer = (function (_super) {
__extends(Mesh2dRenderer, _super);
function Mesh2dRenderer() {
return _super !== null && _super.apply(this, arguments) || this;
}
Mesh2dRenderer.prototype.onContextChange = function () {
var gl = this.renderer.gl;
this.shader = new PIXI.Shader(gl, shaderVert, shaderFrag);
};
return Mesh2dRenderer;
}(PIXI.mesh.MeshRenderer));
pixi_projection.Mesh2dRenderer = Mesh2dRenderer;
PIXI.WebGLRenderer.registerPlugin('mesh2d', Mesh2dRenderer);
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Sprite2d = (function (_super) {
__extends(Sprite2d, _super);
function Sprite2d(texture) {
var _this = _super.call(this, texture) || this;
_this.proj = new pixi_projection.Projection2d(_this.transform);
_this.pluginName = 'sprite2d';
_this.vertexData = new Float32Array(12);
return _this;
}
Sprite2d.prototype._calculateBounds = function () {
this.calculateTrimmedVertices();
this._bounds.addQuad(this.vertexTrimmedData);
};
Sprite2d.prototype.calculateVertices = function () {
if (this.proj._affine) {
if (this.vertexData.length != 8) {
this.vertexData = new Float32Array(8);
}
_super.prototype.calculateVertices.call(this);
return;
}
if (this.vertexData.length != 12) {
this.vertexData = new Float32Array(12);
}
var wid = this.transform._worldID;
var tuid = this._texture._updateID;
if (this._transformID === wid && this._textureID === tuid) {
return;
}
this._transformID = wid;
this._textureID = tuid;
var texture = this._texture;
var wt = this.proj.world.mat3;
var vertexData = this.vertexData;
var trim = texture.trim;
var orig = texture.orig;
var anchor = this._anchor;
var w0 = 0;
var w1 = 0;
var h0 = 0;
var h1 = 0;
if (trim) {
w1 = trim.x - (anchor._x * orig.width);
w0 = w1 + trim.width;
h1 = trim.y - (anchor._y * orig.height);
h0 = h1 + trim.height;
}
else {
w1 = -anchor._x * orig.width;
w0 = w1 + orig.width;
h1 = -anchor._y * orig.height;
h0 = h1 + orig.height;
}
vertexData[0] = (wt[0] * w1) + (wt[3] * h1) + wt[6];
vertexData[1] = (wt[1] * w1) + (wt[4] * h1) + wt[7];
vertexData[2] = (wt[2] * w1) + (wt[5] * h1) + wt[8];
vertexData[3] = (wt[0] * w0) + (wt[3] * h1) + wt[6];
vertexData[4] = (wt[1] * w0) + (wt[4] * h1) + wt[7];
vertexData[5] = (wt[2] * w0) + (wt[5] * h1) + wt[8];
vertexData[6] = (wt[0] * w0) + (wt[3] * h0) + wt[6];
vertexData[7] = (wt[1] * w0) + (wt[4] * h0) + wt[7];
vertexData[8] = (wt[2] * w0) + (wt[5] * h0) + wt[8];
vertexData[9] = (wt[0] * w1) + (wt[3] * h0) + wt[6];
vertexData[10] = (wt[1] * w1) + (wt[4] * h0) + wt[7];
vertexData[11] = (wt[2] * w1) + (wt[5] * h0) + wt[8];
};
Sprite2d.prototype.calculateTrimmedVertices = function () {
if (this.proj._affine) {
_super.prototype.calculateTrimmedVertices.call(this);
return;
}
var wid = this.transform._worldID;
var tuid = this._texture._updateID;
if (!this.vertexTrimmedData) {
this.vertexTrimmedData = new Float32Array(8);
}
else if (this._transformTrimmedID === wid && this._textureTrimmedID === tuid) {
return;
}
this._transformTrimmedID = wid;
this._textureTrimmedID = tuid;
var texture = this._texture;
var vertexData = this.vertexTrimmedData;
var orig = texture.orig;
var anchor = this._anchor;
var wt = this.proj.world.mat3;
var w1 = -anchor._x * orig.width;
var w0 = w1 + orig.width;
var h1 = -anchor._y * orig.height;
var h0 = h1 + orig.height;
var z = 1.0 / (wt[2] * w1 + wt[5] * h1 + wt[8]);
vertexData[0] = z * ((wt[0] * w1) + (wt[3] * h1) + wt[6]);
vertexData[1] = z * ((wt[1] * w1) + (wt[4] * h1) + wt[7]);
z = 1.0 / (wt[2] * w0 + wt[5] * h1 + wt[8]);
vertexData[2] = z * ((wt[0] * w0) + (wt[3] * h1) + wt[6]);
vertexData[3] = z * ((wt[1] * w0) + (wt[4] * h1) + wt[7]);
z = 1.0 / (wt[2] * w0 + wt[5] * h0 + wt[8]);
vertexData[4] = z * ((wt[0] * w0) + (wt[3] * h0) + wt[6]);
vertexData[5] = z * ((wt[1] * w0) + (wt[4] * h0) + wt[7]);
z = 1.0 / (wt[2] * w1 + wt[5] * h0 + wt[8]);
vertexData[6] = z * ((wt[0] * w1) + (wt[3] * h0) + wt[6]);
vertexData[7] = z * ((wt[1] * w1) + (wt[4] * h0) + wt[7]);
};
Sprite2d.prototype.toLocal = function (position, from, point, skipUpdate, step) {
if (step === void 0) { step = pixi_projection.TRANSFORM_STEP.ALL; }
return pixi_projection.container2dToLocal.call(this, position, from, point, skipUpdate, step);
};
Object.defineProperty(Sprite2d.prototype, "worldTransform", {
get: function () {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
},
enumerable: true,
configurable: true
});
return Sprite2d;
}(PIXI.Sprite));
pixi_projection.Sprite2d = Sprite2d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var MultiTextureSpriteRenderer = pixi_projection.webgl.MultiTextureSpriteRenderer;
var Sprite2dRenderer = (function (_super) {
__extends(Sprite2dRenderer, _super);
function Sprite2dRenderer() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.shaderVert = "precision highp float;\nattribute vec3 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\nattribute float aTextureId;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying float vTextureId;\n\nvoid main(void){\n gl_Position.xyw = projectionMatrix * aVertexPosition;\n gl_Position.z = 0.0;\n \n vTextureCoord = aTextureCoord;\n vTextureId = aTextureId;\n vColor = aColor;\n}\n";
_this.shaderFrag = "\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying float vTextureId;\nuniform sampler2D uSamplers[%count%];\n\nvoid main(void){\nvec4 color;\nvec2 textureCoord = vTextureCoord;\nfloat textureId = floor(vTextureId+0.5);\n%forloop%\ngl_FragColor = color * vColor;\n}";
return _this;
}
Sprite2dRenderer.prototype.createVao = function (vertexBuffer) {
var attrs = this.shader.attributes;
this.vertSize = 6;
this.vertByteSize = this.vertSize * 4;
var gl = this.renderer.gl;
var vao = this.renderer.createVao()
.addIndex(this.indexBuffer)
.addAttribute(vertexBuffer, attrs.aVertexPosition, gl.FLOAT, false, this.vertByteSize, 0)
.addAttribute(vertexBuffer, attrs.aTextureCoord, gl.UNSIGNED_SHORT, true, this.vertByteSize, 3 * 4)
.addAttribute(vertexBuffer, attrs.aColor, gl.UNSIGNED_BYTE, true, this.vertByteSize, 4 * 4);
if (attrs.aTextureId) {
vao.addAttribute(vertexBuffer, attrs.aTextureId, gl.FLOAT, false, this.vertByteSize, 5 * 4);
}
return vao;
};
Sprite2dRenderer.prototype.fillVertices = function (float32View, uint32View, index, sprite, argb, textureId) {
var vertexData = sprite.vertexData;
var uvs = sprite._texture._uvs.uvsUint32;
if (vertexData.length === 8) {
if (this.renderer.roundPixels) {
var resolution = this.renderer.resolution;
float32View[index] = ((vertexData[0] * resolution) | 0) / resolution;
float32View[index + 1] = ((vertexData[1] * resolution) | 0) / resolution;
float32View[index + 2] = 1.0;
float32View[index + 6] = ((vertexData[2] * resolution) | 0) / resolution;
float32View[index + 7] = ((vertexData[3] * resolution) | 0) / resolution;
float32View[index + 8] = 1.0;
float32View[index + 12] = ((vertexData[4] * resolution) | 0) / resolution;
float32View[index + 13] = ((vertexData[5] * resolution) | 0) / resolution;
float32View[index + 14] = 1.0;
float32View[index + 18] = ((vertexData[6] * resolution) | 0) / resolution;
float32View[index + 19] = ((vertexData[7] * resolution) | 0) / resolution;
float32View[index + 20] = 1.0;
}
else {
float32View[index] = vertexData[0];
float32View[index + 1] = vertexData[1];
float32View[index + 2] = 1.0;
float32View[index + 6] = vertexData[2];
float32View[index + 7] = vertexData[3];
float32View[index + 8] = 1.0;
float32View[index + 12] = vertexData[4];
float32View[index + 13] = vertexData[5];
float32View[index + 14] = 1.0;
float32View[index + 18] = vertexData[6];
float32View[index + 19] = vertexData[7];
float32View[index + 20] = 1.0;
}
}
else {
float32View[index] = vertexData[0];
float32View[index + 1] = vertexData[1];
float32View[index + 2] = vertexData[2];
float32View[index + 6] = vertexData[3];
float32View[index + 7] = vertexData[4];
float32View[index + 8] = vertexData[5];
float32View[index + 12] = vertexData[6];
float32View[index + 13] = vertexData[7];
float32View[index + 14] = vertexData[8];
float32View[index + 18] = vertexData[9];
float32View[index + 19] = vertexData[10];
float32View[index + 20] = vertexData[11];
}
uint32View[index + 3] = uvs[0];
uint32View[index + 9] = uvs[1];
uint32View[index + 15] = uvs[2];
uint32View[index + 21] = uvs[3];
uint32View[index + 4] = uint32View[index + 10] = uint32View[index + 16] = uint32View[index + 22] = argb;
float32View[index + 5] = float32View[index + 11] = float32View[index + 17] = float32View[index + 23] = textureId;
};
return Sprite2dRenderer;
}(MultiTextureSpriteRenderer));
PIXI.WebGLRenderer.registerPlugin('sprite2d', Sprite2dRenderer);
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Text2d = (function (_super) {
__extends(Text2d, _super);
function Text2d(text, style, canvas) {
var _this = _super.call(this, text, style, canvas) || this;
_this.proj = new pixi_projection.Projection2d(_this.transform);
_this.pluginName = 'sprite2d';
_this.vertexData = new Float32Array(12);
return _this;
}
Object.defineProperty(Text2d.prototype, "worldTransform", {
get: function () {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
},
enumerable: true,
configurable: true
});
return Text2d;
}(PIXI.Text));
pixi_projection.Text2d = Text2d;
Text2d.prototype.calculateVertices = pixi_projection.Sprite2d.prototype.calculateVertices;
Text2d.prototype.calculateTrimmedVertices = pixi_projection.Sprite2d.prototype.calculateTrimmedVertices;
Text2d.prototype._calculateBounds = pixi_projection.Sprite2d.prototype._calculateBounds;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
function convertTo2d() {
if (this.proj)
return;
this.proj = new pixi_projection.Projection2d(this.transform);
this.toLocal = pixi_projection.Container2d.prototype.toLocal;
Object.defineProperty(this, "worldTransform", {
get: pixi_projection.container2dWorldTransform,
enumerable: true,
configurable: true
});
}
PIXI.Container.prototype.convertTo2d = convertTo2d;
PIXI.Sprite.prototype.convertTo2d = function () {
if (this.proj)
return;
this.calculateVertices = pixi_projection.Sprite2d.prototype.calculateVertices;
this.calculateTrimmedVertices = pixi_projection.Sprite2d.prototype.calculateTrimmedVertices;
this._calculateBounds = pixi_projection.Sprite2d.prototype._calculateBounds;
this.pluginName = 'sprite2d';
this.vertexData = new Float32Array(12);
convertTo2d.call(this);
};
PIXI.mesh.Mesh.prototype.convertTo2d = function () {
if (this.proj)
return;
this.pluginName = 'mesh2d';
convertTo2d.call(this);
};
PIXI.Container.prototype.convertSubtreeTo2d = function () {
this.convertTo2d();
for (var i = 0; i < this.children.length; i++) {
this.children[i].convertSubtreeTo2d();
}
};
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var tempTransform = new PIXI.TransformStatic();
var TilingSprite2d = (function (_super) {
__extends(TilingSprite2d, _super);
function TilingSprite2d(texture, width, height) {
var _this = _super.call(this, texture, width, height) || this;
_this.tileProj = new pixi_projection.Projection2d(_this.tileTransform);
_this.tileProj.reverseLocalOrder = true;
_this.proj = new pixi_projection.Projection2d(_this.transform);
_this.pluginName = 'tilingSprite2d';
_this.uvRespectAnchor = true;
return _this;
}
Object.defineProperty(TilingSprite2d.prototype, "worldTransform", {
get: function () {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
},
enumerable: true,
configurable: true
});
TilingSprite2d.prototype.toLocal = function (position, from, point, skipUpdate, step) {
if (step === void 0) { step = pixi_projection.TRANSFORM_STEP.ALL; }
return pixi_projection.container2dToLocal.call(this, position, from, point, skipUpdate, step);
};
TilingSprite2d.prototype._renderWebGL = function (renderer) {
var texture = this._texture;
if (!texture || !texture.valid) {
return;
}
this.tileTransform.updateTransform(tempTransform);
this.uvTransform.update();
renderer.setObjectRenderer(renderer.plugins[this.pluginName]);
renderer.plugins[this.pluginName].render(this);
};
return TilingSprite2d;
}(PIXI.extras.TilingSprite));
pixi_projection.TilingSprite2d = TilingSprite2d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var shaderVert = "attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\nuniform mat3 translationMatrix;\nuniform mat3 uTransform;\n\nvarying vec3 vTextureCoord;\n\nvoid main(void)\n{\n gl_Position.xyw = projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0);\n\n vTextureCoord = uTransform * vec3(aTextureCoord, 1.0);\n}\n";
var shaderFrag = "\nvarying vec3 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec4 uColor;\nuniform mat3 uMapCoord;\nuniform vec4 uClampFrame;\nuniform vec2 uClampOffset;\n\nvoid main(void)\n{\n vec2 coord = mod(vTextureCoord.xy / vTextureCoord.z - uClampOffset, vec2(1.0, 1.0)) + uClampOffset;\n coord = (uMapCoord * vec3(coord, 1.0)).xy;\n coord = clamp(coord, uClampFrame.xy, uClampFrame.zw);\n\n vec4 sample = texture2D(uSampler, coord);\n gl_FragColor = sample * uColor;\n}\n";
var shaderSimpleFrag = "\n\tvarying vec3 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec4 uColor;\n\nvoid main(void)\n{\n vec4 sample = texture2D(uSampler, vTextureCoord.xy / vTextureCoord.z);\n gl_FragColor = sample * uColor;\n}\n";
var tempMat = new pixi_projection.Matrix2d();
var WRAP_MODES = PIXI.WRAP_MODES;
var utils = PIXI.utils;
var TilingSprite2dRenderer = (function (_super) {
__extends(TilingSprite2dRenderer, _super);
function TilingSprite2dRenderer() {
return _super !== null && _super.apply(this, arguments) || this;
}
TilingSprite2dRenderer.prototype.onContextChange = function () {
var gl = this.renderer.gl;
this.shader = new PIXI.Shader(gl, shaderVert, shaderFrag);
this.simpleShader = new PIXI.Shader(gl, shaderVert, shaderSimpleFrag);
this.renderer.bindVao(null);
this.quad = new PIXI.Quad(gl, this.renderer.state.attribState);
this.quad.initVao(this.shader);
};
TilingSprite2dRenderer.prototype.render = function (ts) {
var renderer = this.renderer;
var quad = this.quad;
renderer.bindVao(quad.vao);
var vertices = quad.vertices;
vertices[0] = vertices[6] = (ts._width) * -ts.anchor.x;
vertices[1] = vertices[3] = ts._height * -ts.anchor.y;
vertices[2] = vertices[4] = (ts._width) * (1.0 - ts.anchor.x);
vertices[5] = vertices[7] = ts._height * (1.0 - ts.anchor.y);
if (ts.uvRespectAnchor) {
vertices = quad.uvs;
vertices[0] = vertices[6] = -ts.anchor.x;
vertices[1] = vertices[3] = -ts.anchor.y;
vertices[2] = vertices[4] = 1.0 - ts.anchor.x;
vertices[5] = vertices[7] = 1.0 - ts.anchor.y;
}
quad.upload();
var tex = ts._texture;
var baseTex = tex.baseTexture;
var lt = ts.tileProj.world;
var uv = ts.uvTransform;
var isSimple = baseTex.isPowerOfTwo
&& tex.frame.width === baseTex.width && tex.frame.height === baseTex.height;
if (isSimple) {
if (!baseTex._glTextures[renderer.CONTEXT_UID]) {
if (baseTex.wrapMode === WRAP_MODES.CLAMP) {
baseTex.wrapMode = WRAP_MODES.REPEAT;
}
}
else {
isSimple = baseTex.wrapMode !== WRAP_MODES.CLAMP;
}
}
var shader = isSimple ? this.simpleShader : this.shader;
renderer.bindShader(shader);
tempMat.identity();
tempMat.scale(tex.width, tex.height);
tempMat.prepend(lt);
tempMat.scale(1.0 / ts._width, 1.0 / ts._height);
tempMat.invert();
if (isSimple) {
tempMat.prepend(uv.mapCoord);
}
else {
shader.uniforms.uMapCoord = uv.mapCoord.toArray(true);
shader.uniforms.uClampFrame = uv.uClampFrame;
shader.uniforms.uClampOffset = uv.uClampOffset;
}
shader.uniforms.uTransform = tempMat.toArray(true);
shader.uniforms.uColor = utils.premultiplyTintToRgba(ts.tint, ts.worldAlpha, shader.uniforms.uColor, baseTex.premultipliedAlpha);
shader.uniforms.translationMatrix = ts.proj.world.toArray(true);
shader.uniforms.uSampler = renderer.bindTexture(tex);
renderer.setBlendMode(utils.correctBlendMode(ts.blendMode, baseTex.premultipliedAlpha));
quad.vao.draw(this.renderer.gl.TRIANGLES, 6, 0);
};
return TilingSprite2dRenderer;
}(PIXI.extras.TilingSpriteRenderer));
pixi_projection.TilingSprite2dRenderer = TilingSprite2dRenderer;
PIXI.WebGLRenderer.registerPlugin('tilingSprite2d', TilingSprite2dRenderer);
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var ProjectionsManager = (function () {
function ProjectionsManager(renderer) {
var _this = this;
this.onContextChange = function (gl) {
_this.gl = gl;
_this.renderer.maskManager.pushSpriteMask = pushSpriteMask;
};
this.renderer = renderer;
renderer.on('context', this.onContextChange);
}
ProjectionsManager.prototype.destroy = function () {
this.renderer.off('context', this.onContextChange);
};
return ProjectionsManager;
}());
pixi_projection.ProjectionsManager = ProjectionsManager;
function pushSpriteMask(target, maskData) {
var alphaMaskFilter = this.alphaMaskPool[this.alphaMaskIndex];
if (!alphaMaskFilter) {
alphaMaskFilter = this.alphaMaskPool[this.alphaMaskIndex] = [new pixi_projection.SpriteMaskFilter2d(maskData)];
}
alphaMaskFilter[0].resolution = this.renderer.resolution;
alphaMaskFilter[0].maskSprite = maskData;
target.filterArea = maskData.getBounds(true);
this.renderer.filterManager.pushFilter(target, alphaMaskFilter);
this.alphaMaskIndex++;
}
PIXI.WebGLRenderer.registerPlugin('projections', ProjectionsManager);
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var spriteMaskVert = "\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec3 vMaskCoord;\nvarying vec2 vTextureCoord;\n\nvoid main(void)\n{\n\tgl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n\n\tvTextureCoord = aTextureCoord;\n\tvMaskCoord = otherMatrix * vec3( aTextureCoord, 1.0);\n}\n";
var spriteMaskFrag = "\nvarying vec3 vMaskCoord;\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n vec2 uv = vMaskCoord.xy / vMaskCoord.z;\n \n vec2 text = abs( uv - 0.5 );\n text = step(0.5, text);\n\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, uv);\n\n original *= (masky.r * masky.a * alpha * clip);\n\n gl_FragColor = original;\n}\n";
var tempMat = new pixi_projection.Matrix2d();
var SpriteMaskFilter2d = (function (_super) {
__extends(SpriteMaskFilter2d, _super);
function SpriteMaskFilter2d(sprite) {
var _this = _super.call(this, spriteMaskVert, spriteMaskFrag) || this;
_this.maskMatrix = new pixi_projection.Matrix2d();
sprite.renderable = false;
_this.maskSprite = sprite;
return _this;
}
SpriteMaskFilter2d.prototype.apply = function (filterManager, input, output, clear, currentState) {
var maskSprite = this.maskSprite;
this.uniforms.mask = maskSprite.texture;
this.uniforms.otherMatrix = SpriteMaskFilter2d.calculateSpriteMatrix(currentState, this.maskMatrix, maskSprite);
this.uniforms.alpha = maskSprite.worldAlpha;
filterManager.applyFilter(this, input, output);
};
SpriteMaskFilter2d.calculateSpriteMatrix = function (currentState, mappedMatrix, sprite) {
var proj = sprite.proj;
var filterArea = currentState.sourceFrame;
var textureSize = currentState.renderTarget.size;
var worldTransform = proj && !proj._affine ? proj.world.copyTo(tempMat) : tempMat.copyFrom(sprite.transform.worldTransform);
var texture = sprite.texture.orig;
mappedMatrix.set(textureSize.width, 0, 0, textureSize.height, filterArea.x, filterArea.y);
worldTransform.invert();
mappedMatrix.setToMult(worldTransform, mappedMatrix);
mappedMatrix.scaleAndTranslate(1.0 / texture.width, 1.0 / texture.height, sprite.anchor.x, sprite.anchor.y);
return mappedMatrix;
};
return SpriteMaskFilter2d;
}(PIXI.Filter));
pixi_projection.SpriteMaskFilter2d = SpriteMaskFilter2d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
function container3dWorldTransform() {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
}
pixi_projection.container3dWorldTransform = container3dWorldTransform;
var Container3d = (function (_super) {
__extends(Container3d, _super);
function Container3d() {
var _this = _super.call(this) || this;
_this.proj = new pixi_projection.Projection3d(_this.transform);
return _this;
}
Container3d.prototype.isFrontFace = function (forceUpdate) {
if (forceUpdate === void 0) { forceUpdate = false; }
if (forceUpdate) {
this._recursivePostUpdateTransform();
this.displayObjectUpdateTransform();
}
var mat = this.proj.world.mat4;
var dx1 = mat[0] * mat[15] - mat[3] * mat[12];
var dy1 = mat[1] * mat[15] - mat[3] * mat[13];
var dx2 = mat[4] * mat[15] - mat[7] * mat[12];
var dy2 = mat[5] * mat[15] - mat[7] * mat[13];
return dx1 * dy2 - dx2 * dy1 > 0;
};
Container3d.prototype.getDepth = function (forceUpdate) {
if (forceUpdate === void 0) { forceUpdate = false; }
if (forceUpdate) {
this._recursivePostUpdateTransform();
this.displayObjectUpdateTransform();
}
var mat4 = this.proj.world.mat4;
return mat4[14] / mat4[15];
};
Container3d.prototype.toLocal = function (position, from, point, skipUpdate, step) {
if (step === void 0) { step = pixi_projection.TRANSFORM_STEP.ALL; }
if (from) {
position = from.toGlobal(position, point, skipUpdate);
}
if (!skipUpdate) {
this._recursivePostUpdateTransform();
}
if (step === pixi_projection.TRANSFORM_STEP.ALL) {
if (!skipUpdate) {
this.displayObjectUpdateTransform();
}
if (this.proj.affine) {
return this.transform.worldTransform.applyInverse(point, point);
}
return this.proj.world.applyInverse(point, point);
}
if (this.parent) {
point = this.parent.worldTransform.applyInverse(position, point);
}
else {
point.copy(position);
}
if (step === pixi_projection.TRANSFORM_STEP.NONE) {
return point;
}
point = this.transform.localTransform.applyInverse(point, point);
if (step === pixi_projection.TRANSFORM_STEP.PROJ && this.proj.cameraMode) {
point = this.proj.cameraMatrix.applyInverse(point, point);
}
return point;
};
Object.defineProperty(Container3d.prototype, "worldTransform", {
get: function () {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Container3d.prototype, "position3d", {
get: function () {
return this.proj.position;
},
set: function (value) {
this.proj.position.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Container3d.prototype, "scale3d", {
get: function () {
return this.proj.scale;
},
set: function (value) {
this.proj.scale.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Container3d.prototype, "euler", {
get: function () {
return this.proj.euler;
},
set: function (value) {
this.proj.euler.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Container3d.prototype, "pivot3d", {
get: function () {
return this.proj.pivot;
},
set: function (value) {
this.proj.pivot.copy(value);
},
enumerable: true,
configurable: true
});
return Container3d;
}(PIXI.Container));
pixi_projection.Container3d = Container3d;
pixi_projection.container3dToLocal = Container3d.prototype.toLocal;
pixi_projection.container3dGetDepth = Container3d.prototype.getDepth;
pixi_projection.container3dIsFrontFace = Container3d.prototype.isFrontFace;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Camera3d = (function (_super) {
__extends(Camera3d, _super);
function Camera3d() {
var _this = _super.call(this) || this;
_this._far = 0;
_this._near = 0;
_this._focus = 0;
_this._orthographic = false;
_this.proj.cameraMode = true;
_this.setPlanes(400, 10, 10000, false);
return _this;
}
Object.defineProperty(Camera3d.prototype, "far", {
get: function () {
return this._far;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Camera3d.prototype, "near", {
get: function () {
return this._near;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Camera3d.prototype, "focus", {
get: function () {
return this._focus;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Camera3d.prototype, "ortographic", {
get: function () {
return this._orthographic;
},
enumerable: true,
configurable: true
});
Camera3d.prototype.setPlanes = function (focus, near, far, orthographic) {
if (near === void 0) { near = 10; }
if (far === void 0) { far = 10000; }
if (orthographic === void 0) { orthographic = false; }
this._focus = focus;
this._near = near;
this._far = far;
this._orthographic = orthographic;
var proj = this.proj;
var mat4 = proj.cameraMatrix.mat4;
proj._projID++;
mat4[10] = 1.0 / (far - near);
mat4[14] = (focus - near) / (far - near);
if (this._orthographic) {
mat4[11] = 0;
}
else {
mat4[11] = 1.0 / focus;
}
};
return Camera3d;
}(pixi_projection.Container3d));
pixi_projection.Camera3d = Camera3d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Euler = (function () {
function Euler(x, y, z) {
this._quatUpdateId = -1;
this._quatDirtyId = 0;
this._sign = 1;
this._x = x || 0;
this._y = y || 0;
this._z = z || 0;
this.quaternion = new Float64Array(4);
this.quaternion[3] = 1;
this.update();
}
Object.defineProperty(Euler.prototype, "x", {
get: function () {
return this._x;
},
set: function (value) {
if (this._x !== value) {
this._x = value;
this._quatDirtyId++;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(Euler.prototype, "y", {
get: function () {
return this._y;
},
set: function (value) {
if (this._y !== value) {
this._y = value;
this._quatDirtyId++;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(Euler.prototype, "z", {
get: function () {
return this._z;
},
set: function (value) {
if (this._z !== value) {
this._z = value;
this._quatDirtyId++;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(Euler.prototype, "pitch", {
get: function () {
return this._x;
},
set: function (value) {
if (this._x !== value) {
this._x = value;
this._quatDirtyId++;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(Euler.prototype, "yaw", {
get: function () {
return this._y;
},
set: function (value) {
if (this._y !== value) {
this._y = value;
this._quatDirtyId++;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(Euler.prototype, "roll", {
get: function () {
return this._z;
},
set: function (value) {
if (this._z !== value) {
this._z = value;
this._quatDirtyId++;
}
},
enumerable: true,
configurable: true
});
Euler.prototype.set = function (x, y, z) {
var _x = x || 0;
var _y = y || 0;
var _z = z || 0;
if (this._x !== _x || this._y !== _y || this._z !== _z) {
this._x = _x;
this._y = _y;
this._z = _z;
this._quatDirtyId++;
}
};
;
Euler.prototype.copy = function (euler) {
var _x = euler.x;
var _y = euler.y;
var _z = euler.z;
if (this._x !== _x || this._y !== _y || this._z !== _z) {
this._x = _x;
this._y = _y;
this._z = _z;
this._quatDirtyId++;
}
};
Euler.prototype.clone = function () {
return new Euler(this._x, this._y, this._z);
};
Euler.prototype.update = function () {
if (this._quatUpdateId === this._quatDirtyId) {
return false;
}
this._quatUpdateId = this._quatDirtyId;
var c1 = Math.cos(this._x / 2);
var c2 = Math.cos(this._y / 2);
var c3 = Math.cos(this._z / 2);
var s = this._sign;
var s1 = s * Math.sin(this._x / 2);
var s2 = s * Math.sin(this._y / 2);
var s3 = s * Math.sin(this._z / 2);
var q = this.quaternion;
q[0] = s1 * c2 * c3 + c1 * s2 * s3;
q[1] = c1 * s2 * c3 - s1 * c2 * s3;
q[2] = c1 * c2 * s3 + s1 * s2 * c3;
q[3] = c1 * c2 * c3 - s1 * s2 * s3;
return true;
};
return Euler;
}());
pixi_projection.Euler = Euler;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var mat4id = [1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1];
var Matrix3d = (function () {
function Matrix3d(backingArray) {
this.floatArray = null;
this._dirtyId = 0;
this._updateId = -1;
this._mat4inv = null;
this.cacheInverse = false;
this.mat4 = new Float64Array(backingArray || mat4id);
}
Object.defineProperty(Matrix3d.prototype, "a", {
get: function () {
return this.mat4[0] / this.mat4[15];
},
set: function (value) {
this.mat4[0] = value * this.mat4[15];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix3d.prototype, "b", {
get: function () {
return this.mat4[1] / this.mat4[15];
},
set: function (value) {
this.mat4[1] = value * this.mat4[15];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix3d.prototype, "c", {
get: function () {
return this.mat4[4] / this.mat4[15];
},
set: function (value) {
this.mat4[4] = value * this.mat4[15];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix3d.prototype, "d", {
get: function () {
return this.mat4[5] / this.mat4[15];
},
set: function (value) {
this.mat4[5] = value * this.mat4[15];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix3d.prototype, "tx", {
get: function () {
return this.mat4[12] / this.mat4[15];
},
set: function (value) {
this.mat4[12] = value * this.mat4[15];
},
enumerable: true,
configurable: true
});
Object.defineProperty(Matrix3d.prototype, "ty", {
get: function () {
return this.mat4[13] / this.mat4[15];
},
set: function (value) {
this.mat4[13] = value * this.mat4[15];
},
enumerable: true,
configurable: true
});
Matrix3d.prototype.set = function (a, b, c, d, tx, ty) {
var mat4 = this.mat4;
mat4[0] = a;
mat4[1] = b;
mat4[2] = 0;
mat4[3] = 0;
mat4[4] = c;
mat4[5] = d;
mat4[6] = 0;
mat4[7] = 0;
mat4[8] = 0;
mat4[9] = 0;
mat4[10] = 1;
mat4[11] = 0;
mat4[12] = tx;
mat4[13] = ty;
mat4[14] = 0;
mat4[15] = 1;
return this;
};
Matrix3d.prototype.toArray = function (transpose, out) {
if (!this.floatArray) {
this.floatArray = new Float32Array(9);
}
var array = out || this.floatArray;
var mat3 = this.mat4;
if (transpose) {
array[0] = mat3[0];
array[1] = mat3[1];
array[2] = mat3[3];
array[3] = mat3[4];
array[4] = mat3[5];
array[5] = mat3[7];
array[6] = mat3[12];
array[7] = mat3[13];
array[8] = mat3[15];
}
else {
array[0] = mat3[0];
array[1] = mat3[4];
array[2] = mat3[12];
array[3] = mat3[2];
array[4] = mat3[6];
array[5] = mat3[13];
array[6] = mat3[3];
array[7] = mat3[7];
array[8] = mat3[15];
}
return array;
};
Matrix3d.prototype.setToTranslation = function (tx, ty, tz) {
var mat4 = this.mat4;
mat4[0] = 1;
mat4[1] = 0;
mat4[2] = 0;
mat4[3] = 0;
mat4[4] = 0;
mat4[5] = 1;
mat4[6] = 0;
mat4[7] = 0;
mat4[8] = 0;
mat4[9] = 0;
mat4[10] = 1;
mat4[11] = 0;
mat4[12] = tx;
mat4[13] = ty;
mat4[14] = tz;
mat4[15] = 1;
};
Matrix3d.prototype.setToRotationTranslationScale = function (quat, tx, ty, tz, sx, sy, sz) {
var out = this.mat4;
var x = quat[0], y = quat[1], z = quat[2], w = quat[3];
var x2 = x + x;
var y2 = y + y;
var z2 = z + z;
var xx = x * x2;
var xy = x * y2;
var xz = x * z2;
var yy = y * y2;
var yz = y * z2;
var zz = z * z2;
var wx = w * x2;
var wy = w * y2;
var wz = w * z2;
out[0] = (1 - (yy + zz)) * sx;
out[1] = (xy + wz) * sx;
out[2] = (xz - wy) * sx;
out[3] = 0;
out[4] = (xy - wz) * sy;
out[5] = (1 - (xx + zz)) * sy;
out[6] = (yz + wx) * sy;
out[7] = 0;
out[8] = (xz + wy) * sz;
out[9] = (yz - wx) * sz;
out[10] = (1 - (xx + yy)) * sz;
out[11] = 0;
out[12] = tx;
out[13] = ty;
out[14] = tz;
out[15] = 1;
return out;
};
Matrix3d.prototype.apply = function (pos, newPos) {
newPos = newPos || new PIXI.Point();
var mat4 = this.mat4;
var x = pos.x;
var y = pos.y;
var z = pos.z;
var w = 1.0 / (mat4[3] * x + mat4[7] * y + mat4[11] * z + mat4[15]);
newPos.x = w * (mat4[0] * x + mat4[4] * y + mat4[8] * z + mat4[12]);
newPos.y = w * (mat4[1] * x + mat4[5] * y + mat4[9] * z + mat4[13]);
newPos.z = w * (mat4[2] * x + mat4[6] * y + mat4[10] * z + mat4[14]);
return newPos;
};
Matrix3d.prototype.translate = function (tx, ty, tz) {
var a = this.mat4;
a[12] = a[0] * tx + a[4] * ty + a[8] * tz + a[12];
a[13] = a[1] * tx + a[5] * ty + a[9] * tz + a[13];
a[14] = a[2] * tx + a[6] * ty + a[10] * tz + a[14];
a[15] = a[3] * tx + a[7] * ty + a[11] * tz + a[15];
return this;
};
Matrix3d.prototype.scale = function (x, y, z) {
var mat4 = this.mat4;
mat4[0] *= x;
mat4[1] *= x;
mat4[2] *= x;
mat4[3] *= x;
mat4[4] *= y;
mat4[5] *= y;
mat4[6] *= y;
mat4[7] *= y;
if (z !== undefined) {
mat4[8] *= z;
mat4[9] *= z;
mat4[10] *= z;
mat4[11] *= z;
}
return this;
};
Matrix3d.prototype.scaleAndTranslate = function (scaleX, scaleY, scaleZ, tx, ty, tz) {
var mat4 = this.mat4;
mat4[0] = scaleX * mat4[0] + tx * mat4[3];
mat4[1] = scaleY * mat4[1] + ty * mat4[3];
mat4[2] = scaleZ * mat4[2] + tz * mat4[3];
mat4[4] = scaleX * mat4[4] + tx * mat4[7];
mat4[5] = scaleY * mat4[5] + ty * mat4[7];
mat4[6] = scaleZ * mat4[6] + tz * mat4[7];
mat4[8] = scaleX * mat4[8] + tx * mat4[11];
mat4[9] = scaleY * mat4[9] + ty * mat4[11];
mat4[10] = scaleZ * mat4[10] + tz * mat4[11];
mat4[12] = scaleX * mat4[12] + tx * mat4[15];
mat4[13] = scaleY * mat4[13] + ty * mat4[15];
mat4[14] = scaleZ * mat4[14] + tz * mat4[15];
};
Matrix3d.prototype.applyInverse = function (pos, newPos) {
newPos = newPos || new pixi_projection.Point3d();
if (!this._mat4inv) {
this._mat4inv = new Float64Array(16);
}
var mat4 = this._mat4inv;
var a = this.mat4;
var x = pos.x;
var y = pos.y;
var z = pos.z;
if (!this.cacheInverse || this._updateId !== this._dirtyId) {
this._updateId = this._dirtyId;
Matrix3d.glMatrixMat4Invert(mat4, a);
}
var w1 = 1.0 / (mat4[3] * x + mat4[7] * y + mat4[11] * z + mat4[15]);
var x1 = w1 * (mat4[0] * x + mat4[4] * y + mat4[8] * z + mat4[12]);
var y1 = w1 * (mat4[1] * x + mat4[5] * y + mat4[9] * z + mat4[13]);
var z1 = w1 * (mat4[2] * x + mat4[6] * y + mat4[10] * z + mat4[14]);
z += 1.0;
var w2 = 1.0 / (mat4[3] * x + mat4[7] * y + mat4[11] * z + mat4[15]);
var x2 = w2 * (mat4[0] * x + mat4[4] * y + mat4[8] * z + mat4[12]);
var y2 = w2 * (mat4[1] * x + mat4[5] * y + mat4[9] * z + mat4[13]);
var z2 = w2 * (mat4[2] * x + mat4[6] * y + mat4[10] * z + mat4[14]);
if (Math.abs(z1 - z2) < 1e-10) {
newPos.set(NaN, NaN, 0);
}
var alpha = (0 - z1) / (z2 - z1);
newPos.set((x2 - x1) * alpha + x1, (y2 - y1) * alpha + y1, 0.0);
return newPos;
};
Matrix3d.prototype.invert = function () {
Matrix3d.glMatrixMat4Invert(this.mat4, this.mat4);
return this;
};
Matrix3d.prototype.invertCopyTo = function (matrix) {
if (!this._mat4inv) {
this._mat4inv = new Float64Array(16);
}
var mat4 = this._mat4inv;
var a = this.mat4;
if (!this.cacheInverse || this._updateId !== this._dirtyId) {
this._updateId = this._dirtyId;
Matrix3d.glMatrixMat4Invert(mat4, a);
}
matrix.mat4.set(mat4);
};
Matrix3d.prototype.identity = function () {
var mat3 = this.mat4;
mat3[0] = 1;
mat3[1] = 0;
mat3[2] = 0;
mat3[3] = 0;
mat3[4] = 0;
mat3[5] = 1;
mat3[6] = 0;
mat3[7] = 0;
mat3[8] = 0;
mat3[9] = 0;
mat3[10] = 1;
mat3[11] = 0;
mat3[12] = 0;
mat3[13] = 0;
mat3[14] = 0;
mat3[15] = 1;
return this;
};
Matrix3d.prototype.clone = function () {
return new Matrix3d(this.mat4);
};
Matrix3d.prototype.copyTo = function (matrix) {
var mat3 = this.mat4;
var ar2 = matrix.mat4;
ar2[0] = mat3[0];
ar2[1] = mat3[1];
ar2[2] = mat3[2];
ar2[3] = mat3[3];
ar2[4] = mat3[4];
ar2[5] = mat3[5];
ar2[6] = mat3[6];
ar2[7] = mat3[7];
ar2[8] = mat3[8];
return matrix;
};
Matrix3d.prototype.copy = function (matrix, affine) {
var mat3 = this.mat4;
var d = 1.0 / mat3[15];
var tx = mat3[12] * d, ty = mat3[13] * d;
matrix.a = (mat3[0] - mat3[3] * tx) * d;
matrix.b = (mat3[1] - mat3[3] * ty) * d;
matrix.c = (mat3[4] - mat3[7] * tx) * d;
matrix.d = (mat3[5] - mat3[7] * ty) * d;
matrix.tx = tx;
matrix.ty = ty;
if (affine >= 2) {
if (affine === pixi_projection.AFFINE.POINT) {
matrix.a = 1;
matrix.b = 0;
matrix.c = 0;
matrix.d = 1;
}
else if (affine === pixi_projection.AFFINE.AXIS_X) {
matrix.c = -matrix.b;
matrix.d = matrix.a;
}
else if (affine === pixi_projection.AFFINE.AXIS_Y) {
matrix.a = matrix.d;
matrix.c = -matrix.b;
}
}
};
Matrix3d.prototype.copyFrom = function (matrix) {
var mat3 = this.mat4;
mat3[0] = matrix.a;
mat3[1] = matrix.b;
mat3[2] = 0;
mat3[3] = 0;
mat3[4] = matrix.c;
mat3[5] = matrix.d;
mat3[6] = 0;
mat3[7] = 0;
mat3[8] = 0;
mat3[9] = 0;
mat3[10] = 1;
mat3[11] = 0;
mat3[12] = matrix.tx;
mat3[13] = matrix.ty;
mat3[14] = 0;
mat3[15] = 1;
this._dirtyId++;
return this;
};
Matrix3d.prototype.setToMultLegacy = function (pt, lt) {
var out = this.mat4;
var b = lt.mat4;
var a00 = pt.a, a01 = pt.b, a10 = pt.c, a11 = pt.d, a30 = pt.tx, a31 = pt.ty;
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
out[0] = b0 * a00 + b1 * a10 + b3 * a30;
out[1] = b0 * a01 + b1 * a11 + b3 * a31;
out[2] = b2;
out[3] = b3;
b0 = b[4];
b1 = b[5];
b2 = b[6];
b3 = b[7];
out[4] = b0 * a00 + b1 * a10 + b3 * a30;
out[5] = b0 * a01 + b1 * a11 + b3 * a31;
out[6] = b2;
out[7] = b3;
b0 = b[8];
b1 = b[9];
b2 = b[10];
b3 = b[11];
out[8] = b0 * a00 + b1 * a10 + b3 * a30;
out[9] = b0 * a01 + b1 * a11 + b3 * a31;
out[10] = b2;
out[11] = b3;
b0 = b[12];
b1 = b[13];
b2 = b[14];
b3 = b[15];
out[12] = b0 * a00 + b1 * a10 + b3 * a30;
out[13] = b0 * a01 + b1 * a11 + b3 * a31;
out[14] = b2;
out[15] = b3;
this._dirtyId++;
return this;
};
Matrix3d.prototype.setToMultLegacy2 = function (pt, lt) {
var out = this.mat4;
var a = pt.mat4;
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
var b00 = lt.a, b01 = lt.b, b10 = lt.c, b11 = lt.d, b30 = lt.tx, b31 = lt.ty;
out[0] = b00 * a00 + b01 * a10;
out[1] = b00 * a01 + b01 * a11;
out[2] = b00 * a02 + b01 * a12;
out[3] = b00 * a03 + b01 * a13;
out[4] = b10 * a00 + b11 * a10;
out[5] = b10 * a01 + b11 * a11;
out[6] = b10 * a02 + b11 * a12;
out[7] = b10 * a03 + b11 * a13;
out[8] = a[8];
out[9] = a[9];
out[10] = a[10];
out[11] = a[11];
out[12] = b30 * a00 + b31 * a10 + a[12];
out[13] = b30 * a01 + b31 * a11 + a[13];
out[14] = b30 * a02 + b31 * a12 + a[14];
out[15] = b30 * a03 + b31 * a13 + a[15];
this._dirtyId++;
return this;
};
Matrix3d.prototype.setToMult = function (pt, lt) {
Matrix3d.glMatrixMat4Multiply(this.mat4, pt.mat4, lt.mat4);
this._dirtyId++;
return this;
};
Matrix3d.prototype.prepend = function (lt) {
if (lt.mat4) {
this.setToMult(lt, this);
}
else {
this.setToMultLegacy(lt, this);
}
};
Matrix3d.glMatrixMat4Invert = function (out, a) {
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
var b00 = a00 * a11 - a01 * a10;
var b01 = a00 * a12 - a02 * a10;
var b02 = a00 * a13 - a03 * a10;
var b03 = a01 * a12 - a02 * a11;
var b04 = a01 * a13 - a03 * a11;
var b05 = a02 * a13 - a03 * a12;
var b06 = a20 * a31 - a21 * a30;
var b07 = a20 * a32 - a22 * a30;
var b08 = a20 * a33 - a23 * a30;
var b09 = a21 * a32 - a22 * a31;
var b10 = a21 * a33 - a23 * a31;
var b11 = a22 * a33 - a23 * a32;
var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
if (!det) {
return null;
}
det = 1.0 / det;
out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
return out;
};
Matrix3d.glMatrixMat4Multiply = function (out, a, b) {
var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
b0 = b[4];
b1 = b[5];
b2 = b[6];
b3 = b[7];
out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
b0 = b[8];
b1 = b[9];
b2 = b[10];
b3 = b[11];
out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
b0 = b[12];
b1 = b[13];
b2 = b[14];
b3 = b[15];
out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
return out;
};
Matrix3d.IDENTITY = new Matrix3d();
Matrix3d.TEMP_MATRIX = new Matrix3d();
return Matrix3d;
}());
pixi_projection.Matrix3d = Matrix3d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var ObservableEuler = (function () {
function ObservableEuler(cb, scope, x, y, z) {
this.cb = cb;
this.scope = scope;
this._quatUpdateId = -1;
this._quatDirtyId = 0;
this._sign = 1;
this._x = x || 0;
this._y = y || 0;
this._z = z || 0;
this.quaternion = new Float64Array(4);
this.quaternion[3] = 1;
this.update();
}
Object.defineProperty(ObservableEuler.prototype, "x", {
get: function () {
return this._x;
},
set: function (value) {
if (this._x !== value) {
this._x = value;
this._quatDirtyId++;
this.cb.call(this.scope);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ObservableEuler.prototype, "y", {
get: function () {
return this._y;
},
set: function (value) {
if (this._y !== value) {
this._y = value;
this._quatDirtyId++;
this.cb.call(this.scope);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ObservableEuler.prototype, "z", {
get: function () {
return this._z;
},
set: function (value) {
if (this._z !== value) {
this._z = value;
this._quatDirtyId++;
this.cb.call(this.scope);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ObservableEuler.prototype, "pitch", {
get: function () {
return this._x;
},
set: function (value) {
if (this._x !== value) {
this._x = value;
this._quatDirtyId++;
this.cb.call(this.scope);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ObservableEuler.prototype, "yaw", {
get: function () {
return this._y;
},
set: function (value) {
if (this._y !== value) {
this._y = value;
this._quatDirtyId++;
this.cb.call(this.scope);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ObservableEuler.prototype, "roll", {
get: function () {
return this._z;
},
set: function (value) {
if (this._z !== value) {
this._z = value;
this._quatDirtyId++;
this.cb.call(this.scope);
}
},
enumerable: true,
configurable: true
});
ObservableEuler.prototype.set = function (x, y, z) {
var _x = x || 0;
var _y = y || 0;
var _z = z || 0;
if (this._x !== _x || this._y !== _y || this._z !== _z) {
this._x = _x;
this._y = _y;
this._z = _z;
this._quatDirtyId++;
this.cb.call(this.scope);
}
};
;
ObservableEuler.prototype.copy = function (euler) {
var _x = euler.x;
var _y = euler.y;
var _z = euler.z;
if (this._x !== _x || this._y !== _y || this._z !== _z) {
this._x = _x;
this._y = _y;
this._z = _z;
this._quatDirtyId++;
this.cb.call(this.scope);
}
};
ObservableEuler.prototype.clone = function () {
return new pixi_projection.Euler(this._x, this._y, this._z);
};
ObservableEuler.prototype.update = function () {
if (this._quatUpdateId === this._quatDirtyId) {
return false;
}
this._quatUpdateId = this._quatDirtyId;
var c1 = Math.cos(this._x / 2);
var c2 = Math.cos(this._y / 2);
var c3 = Math.cos(this._z / 2);
var s = this._sign;
var s1 = s * Math.sin(this._x / 2);
var s2 = s * Math.sin(this._y / 2);
var s3 = s * Math.sin(this._z / 2);
var q = this.quaternion;
q[0] = s1 * c2 * c3 + c1 * s2 * s3;
q[1] = c1 * s2 * c3 - s1 * c2 * s3;
q[2] = c1 * c2 * s3 + s1 * s2 * c3;
q[3] = c1 * c2 * c3 - s1 * s2 * s3;
return true;
};
return ObservableEuler;
}());
pixi_projection.ObservableEuler = ObservableEuler;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
PIXI.Point.prototype.z = 0;
PIXI.Point.prototype.set = function (x, y, z) {
this.x = x || 0;
this.y = (y === undefined) ? this.x : (y || 0);
this.z = (y === undefined) ? this.x : (z || 0);
};
PIXI.Point.prototype.copy = function (p) {
this.set(p.x, p.y, p.z);
};
PIXI.ObservablePoint.prototype._z = 0;
PIXI.ObservablePoint.prototype.set = function (x, y, z) {
var _x = x || 0;
var _y = (y === undefined) ? _x : (y || 0);
var _z = (y === undefined) ? _x : (z || 0);
if (this._x !== _x || this._y !== _y || this._z !== _z) {
this._x = _x;
this._y = _y;
this._z = _z;
this.cb.call(this.scope);
}
};
Object.defineProperty(PIXI.ObservablePoint.prototype, "z", {
get: function () {
return this._z;
},
set: function (value) {
if (this._z !== value) {
this._z = value;
this.cb.call(this.scope);
}
},
enumerable: true,
configurable: true
});
PIXI.ObservablePoint.prototype.copy = function (point) {
if (this._x !== point.x || this._y !== point.y || this._z !== point.z) {
this._x = point.x;
this._y = point.y;
this._z = point.z;
this.cb.call(this.scope);
}
};
var Point3d = (function (_super) {
__extends(Point3d, _super);
function Point3d(x, y, z) {
var _this = _super.call(this, x, y) || this;
_this.z = z;
return _this;
}
return Point3d;
}(PIXI.Point));
pixi_projection.Point3d = Point3d;
PIXI.Point = Point3d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var tempMat = new pixi_projection.Matrix3d();
var Projection3d = (function (_super) {
__extends(Projection3d, _super);
function Projection3d(legacy, enable) {
var _this = _super.call(this, legacy, enable) || this;
_this.cameraMatrix = null;
_this._cameraMode = false;
_this.position = new PIXI.ObservablePoint(_this.onChange, _this, 0, 0);
_this.scale = new PIXI.ObservablePoint(_this.onChange, _this, 1, 1);
_this.euler = new pixi_projection.ObservableEuler(_this.onChange, _this, 0, 0, 0);
_this.pivot = new PIXI.ObservablePoint(_this.onChange, _this, 0, 0);
_this.local = new pixi_projection.Matrix3d();
_this.world = new pixi_projection.Matrix3d();
_this.local.cacheInverse = true;
_this.world.cacheInverse = true;
_this.position._z = 0;
_this.scale._z = 1;
_this.pivot._z = 0;
return _this;
}
Object.defineProperty(Projection3d.prototype, "cameraMode", {
get: function () {
return this._cameraMode;
},
set: function (value) {
if (this._cameraMode === value) {
return;
}
this._cameraMode = value;
this.euler._sign = this._cameraMode ? -1 : 1;
this.euler._quatDirtyId++;
if (value) {
this.cameraMatrix = new pixi_projection.Matrix3d();
}
},
enumerable: true,
configurable: true
});
Projection3d.prototype.onChange = function () {
this._projID++;
};
Projection3d.prototype.clear = function () {
if (this.cameraMatrix) {
this.cameraMatrix.identity();
}
this.position.set(0, 0, 0);
this.scale.set(1, 1, 1);
this.euler.set(0, 0, 0);
this.pivot.set(0, 0, 0);
_super.prototype.clear.call(this);
};
Projection3d.prototype.updateLocalTransform = function (lt) {
if (this._projID === 0) {
this.local.copyFrom(lt);
return;
}
var matrix = this.local;
var euler = this.euler;
var pos = this.position;
var scale = this.scale;
var pivot = this.pivot;
euler.update();
if (!this.cameraMode) {
matrix.setToRotationTranslationScale(euler.quaternion, pos._x, pos._y, pos._z, scale._x, scale._y, scale._z);
matrix.translate(-pivot._x, -pivot._y, -pivot._z);
matrix.setToMultLegacy(lt, matrix);
return;
}
matrix.setToMultLegacy(lt, this.cameraMatrix);
matrix.translate(pivot._x, pivot._y, pivot._z);
matrix.scale(1.0 / scale._x, 1.0 / scale._y, 1.0 / scale._z);
tempMat.setToRotationTranslationScale(euler.quaternion, 0, 0, 0, 1, 1, 1);
matrix.setToMult(matrix, tempMat);
matrix.translate(-pos._x, -pos._y, -pos._z);
this.local._dirtyId++;
};
return Projection3d;
}(pixi_projection.LinearProjection));
pixi_projection.Projection3d = Projection3d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Mesh3d = (function (_super) {
__extends(Mesh3d, _super);
function Mesh3d(texture, vertices, uvs, indices, drawMode) {
var _this = _super.call(this, texture, vertices, uvs, indices, drawMode) || this;
_this.proj = new pixi_projection.Projection3d(_this.transform);
_this.pluginName = 'mesh2d';
return _this;
}
Object.defineProperty(Mesh3d.prototype, "worldTransform", {
get: function () {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
},
enumerable: true,
configurable: true
});
Mesh3d.prototype.toLocal = function (position, from, point, skipUpdate, step) {
if (step === void 0) { step = pixi_projection.TRANSFORM_STEP.ALL; }
return pixi_projection.container3dToLocal.call(this, position, from, point, skipUpdate, step);
};
Mesh3d.prototype.isFrontFace = function (forceUpdate) {
return pixi_projection.container3dIsFrontFace.call(this, forceUpdate);
};
Mesh3d.prototype.getDepth = function (forceUpdate) {
return pixi_projection.container3dGetDepth.call(this, forceUpdate);
};
Object.defineProperty(Mesh3d.prototype, "position3d", {
get: function () {
return this.proj.position;
},
set: function (value) {
this.proj.position.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Mesh3d.prototype, "scale3d", {
get: function () {
return this.proj.scale;
},
set: function (value) {
this.proj.scale.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Mesh3d.prototype, "euler", {
get: function () {
return this.proj.euler;
},
set: function (value) {
this.proj.euler.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Mesh3d.prototype, "pivot3d", {
get: function () {
return this.proj.pivot;
},
set: function (value) {
this.proj.pivot.copy(value);
},
enumerable: true,
configurable: true
});
return Mesh3d;
}(PIXI.mesh.Mesh));
pixi_projection.Mesh3d = Mesh3d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Sprite3d = (function (_super) {
__extends(Sprite3d, _super);
function Sprite3d(texture) {
var _this = _super.call(this, texture) || this;
_this.culledByFrustrum = false;
_this.trimmedCulledByFrustrum = false;
_this.proj = new pixi_projection.Projection3d(_this.transform);
_this.pluginName = 'sprite2d';
_this.vertexData = new Float32Array(12);
return _this;
}
Sprite3d.prototype._calculateBounds = function () {
this.calculateVertices();
if (this.culledByFrustrum) {
return;
}
this.calculateTrimmedVertices();
if (!this.trimmedCulledByFrustrum) {
this._bounds.addQuad(this.vertexTrimmedData);
}
};
Sprite3d.prototype.calculateVertices = function () {
if (this.proj._affine) {
if (this.vertexData.length != 8) {
this.vertexData = new Float32Array(8);
}
_super.prototype.calculateVertices.call(this);
return;
}
if (this.vertexData.length != 12) {
this.vertexData = new Float32Array(12);
}
var wid = this.transform._worldID;
var tuid = this._texture._updateID;
if (this._transformID === wid && this._textureID === tuid) {
return;
}
this._transformID = wid;
this._textureID = tuid;
var texture = this._texture;
var wt = this.proj.world.mat4;
var vertexData = this.vertexData;
var trim = texture.trim;
var orig = texture.orig;
var anchor = this._anchor;
var w0 = 0;
var w1 = 0;
var h0 = 0;
var h1 = 0;
if (trim) {
w1 = trim.x - (anchor._x * orig.width);
w0 = w1 + trim.width;
h1 = trim.y - (anchor._y * orig.height);
h0 = h1 + trim.height;
}
else {
w1 = -anchor._x * orig.width;
w0 = w1 + orig.width;
h1 = -anchor._y * orig.height;
h0 = h1 + orig.height;
}
var culled = false;
var z;
vertexData[0] = (wt[0] * w1) + (wt[4] * h1) + wt[12];
vertexData[1] = (wt[1] * w1) + (wt[5] * h1) + wt[13];
z = (wt[2] * w1) + (wt[6] * h1) + wt[14];
vertexData[2] = (wt[3] * w1) + (wt[7] * h1) + wt[15];
culled = culled || z < 0;
vertexData[3] = (wt[0] * w0) + (wt[4] * h1) + wt[12];
vertexData[4] = (wt[1] * w0) + (wt[5] * h1) + wt[13];
z = (wt[2] * w0) + (wt[6] * h1) + wt[14];
vertexData[5] = (wt[3] * w0) + (wt[7] * h1) + wt[15];
culled = culled || z < 0;
vertexData[6] = (wt[0] * w0) + (wt[4] * h0) + wt[12];
vertexData[7] = (wt[1] * w0) + (wt[5] * h0) + wt[13];
z = (wt[2] * w0) + (wt[6] * h0) + wt[14];
vertexData[8] = (wt[3] * w0) + (wt[7] * h0) + wt[15];
culled = culled || z < 0;
vertexData[9] = (wt[0] * w1) + (wt[4] * h0) + wt[12];
vertexData[10] = (wt[1] * w1) + (wt[5] * h0) + wt[13];
z = (wt[2] * w1) + (wt[6] * h0) + wt[14];
vertexData[11] = (wt[3] * w1) + (wt[7] * h0) + wt[15];
culled = culled || z < 0;
this.culledByFrustrum = culled;
};
Sprite3d.prototype.calculateTrimmedVertices = function () {
if (this.proj._affine) {
_super.prototype.calculateTrimmedVertices.call(this);
return;
}
var wid = this.transform._worldID;
var tuid = this._texture._updateID;
if (!this.vertexTrimmedData) {
this.vertexTrimmedData = new Float32Array(8);
}
else if (this._transformTrimmedID === wid && this._textureTrimmedID === tuid) {
return;
}
this._transformTrimmedID = wid;
this._textureTrimmedID = tuid;
var texture = this._texture;
var vertexData = this.vertexTrimmedData;
var orig = texture.orig;
var anchor = this._anchor;
var wt = this.proj.world.mat4;
var w1 = -anchor._x * orig.width;
var w0 = w1 + orig.width;
var h1 = -anchor._y * orig.height;
var h0 = h1 + orig.height;
var culled = false;
var w = 1.0 / (wt[3] * w1 + wt[7] * h1 + wt[15]);
vertexData[0] = w * ((wt[0] * w1) + (wt[4] * h1) + wt[12]);
vertexData[1] = w * ((wt[1] * w1) + (wt[5] * h1) + wt[13]);
var z = (wt[2] * w1) + (wt[6] * h1) + wt[14];
culled = culled || z < 0;
w = 1.0 / (wt[3] * w0 + wt[7] * h1 + wt[15]);
vertexData[2] = w * ((wt[0] * w0) + (wt[4] * h1) + wt[12]);
vertexData[3] = w * ((wt[1] * w0) + (wt[5] * h1) + wt[13]);
z = (wt[2] * w0) + (wt[6] * h1) + wt[14];
culled = culled || z < 0;
w = 1.0 / (wt[3] * w0 + wt[7] * h0 + wt[15]);
vertexData[4] = w * ((wt[0] * w0) + (wt[4] * h0) + wt[12]);
vertexData[5] = w * ((wt[1] * w0) + (wt[5] * h0) + wt[13]);
z = (wt[2] * w0) + (wt[6] * h0) + wt[14];
culled = culled || z < 0;
w = 1.0 / (wt[3] * w1 + wt[7] * h0 + wt[15]);
vertexData[6] = w * ((wt[0] * w1) + (wt[4] * h0) + wt[12]);
vertexData[7] = w * ((wt[1] * w1) + (wt[5] * h0) + wt[13]);
z = (wt[2] * w1) + (wt[6] * h0) + wt[14];
culled = culled || z < 0;
this.trimmedCulledByFrustrum = culled;
};
Sprite3d.prototype._renderWebGL = function (renderer) {
this.calculateVertices();
if (this.culledByFrustrum) {
return;
}
renderer.setObjectRenderer(renderer.plugins[this.pluginName]);
renderer.plugins[this.pluginName].render(this);
};
Sprite3d.prototype.containsPoint = function (point) {
if (this.culledByFrustrum) {
return false;
}
return _super.prototype.containsPoint.call(this, point);
};
Object.defineProperty(Sprite3d.prototype, "worldTransform", {
get: function () {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
},
enumerable: true,
configurable: true
});
Sprite3d.prototype.toLocal = function (position, from, point, skipUpdate, step) {
if (step === void 0) { step = pixi_projection.TRANSFORM_STEP.ALL; }
return pixi_projection.container3dToLocal.call(this, position, from, point, skipUpdate, step);
};
Sprite3d.prototype.isFrontFace = function (forceUpdate) {
return pixi_projection.container3dIsFrontFace.call(this, forceUpdate);
};
Sprite3d.prototype.getDepth = function (forceUpdate) {
return pixi_projection.container3dGetDepth.call(this, forceUpdate);
};
Object.defineProperty(Sprite3d.prototype, "position3d", {
get: function () {
return this.proj.position;
},
set: function (value) {
this.proj.position.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Sprite3d.prototype, "scale3d", {
get: function () {
return this.proj.scale;
},
set: function (value) {
this.proj.scale.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Sprite3d.prototype, "euler", {
get: function () {
return this.proj.euler;
},
set: function (value) {
this.proj.euler.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Sprite3d.prototype, "pivot3d", {
get: function () {
return this.proj.pivot;
},
set: function (value) {
this.proj.pivot.copy(value);
},
enumerable: true,
configurable: true
});
return Sprite3d;
}(PIXI.Sprite));
pixi_projection.Sprite3d = Sprite3d;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var Text3d = (function (_super) {
__extends(Text3d, _super);
function Text3d(text, style, canvas) {
var _this = _super.call(this, text, style, canvas) || this;
_this.proj = new pixi_projection.Projection3d(_this.transform);
_this.pluginName = 'sprite2d';
_this.vertexData = new Float32Array(12);
return _this;
}
Object.defineProperty(Text3d.prototype, "worldTransform", {
get: function () {
return this.proj.affine ? this.transform.worldTransform : this.proj.world;
},
enumerable: true,
configurable: true
});
Text3d.prototype.toLocal = function (position, from, point, skipUpdate, step) {
if (step === void 0) { step = pixi_projection.TRANSFORM_STEP.ALL; }
return pixi_projection.container3dToLocal.call(this, position, from, point, skipUpdate, step);
};
Text3d.prototype.isFrontFace = function (forceUpdate) {
return pixi_projection.container3dIsFrontFace.call(this, forceUpdate);
};
Text3d.prototype.getDepth = function (forceUpdate) {
return pixi_projection.container3dGetDepth.call(this, forceUpdate);
};
Object.defineProperty(Text3d.prototype, "position3d", {
get: function () {
return this.proj.position;
},
set: function (value) {
this.proj.position.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Text3d.prototype, "scale3d", {
get: function () {
return this.proj.scale;
},
set: function (value) {
this.proj.scale.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Text3d.prototype, "euler", {
get: function () {
return this.proj.euler;
},
set: function (value) {
this.proj.euler.copy(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Text3d.prototype, "pivot3d", {
get: function () {
return this.proj.pivot;
},
set: function (value) {
this.proj.pivot.copy(value);
},
enumerable: true,
configurable: true
});
return Text3d;
}(PIXI.Text));
pixi_projection.Text3d = Text3d;
Text3d.prototype.calculateVertices = pixi_projection.Sprite3d.prototype.calculateVertices;
Text3d.prototype.calculateTrimmedVertices = pixi_projection.Sprite3d.prototype.calculateTrimmedVertices;
Text3d.prototype._calculateBounds = pixi_projection.Sprite3d.prototype._calculateBounds;
Text3d.prototype.containsPoint = pixi_projection.Sprite3d.prototype.containsPoint;
Text3d.prototype._renderWebGL = pixi_projection.Sprite3d.prototype._renderWebGL;
})(pixi_projection || (pixi_projection = {}));
var pixi_projection;
(function (pixi_projection) {
var containerProps = {
worldTransform: {
get: pixi_projection.container3dWorldTransform,
enumerable: true,
configurable: true
},
position3d: {
get: function () { return this.proj.position; },
set: function (value) { this.proj.position.copy(value); }
},
scale3d: {
get: function () { return this.proj.scale; },
set: function (value) { this.proj.scale.copy(value); }
},
pivot3d: {
get: function () { return this.proj.pivot; },
set: function (value) { this.proj.pivot.copy(value); }
},
euler: {
get: function () { return this.proj.euler; },
set: function (value) { this.proj.euler.copy(value); }
}
};
function convertTo3d() {
if (this.proj)
return;
this.proj = new pixi_projection.Projection3d(this.transform);
this.toLocal = pixi_projection.Container3d.prototype.toLocal;
this.isFrontFace = pixi_projection.Container3d.prototype.isFrontFace;
this.getDepth = pixi_projection.Container3d.prototype.getDepth;
Object.defineProperties(this, containerProps);
}
PIXI.Container.prototype.convertTo3d = convertTo3d;
PIXI.Sprite.prototype.convertTo3d = function () {
if (this.proj)
return;
this.calculateVertices = pixi_projection.Sprite3d.prototype.calculateVertices;
this.calculateTrimmedVertices = pixi_projection.Sprite3d.prototype.calculateTrimmedVertices;
this._calculateBounds = pixi_projection.Sprite3d.prototype._calculateBounds;
this.containsPoint = pixi_projection.Sprite3d.prototype.containsPoint;
this.pluginName = 'sprite2d';
this.vertexData = new Float32Array(12);
convertTo3d.call(this);
};
PIXI.mesh.Mesh.prototype.convertTo3d = function () {
if (this.proj)
return;
this.pluginName = 'mesh2d';
convertTo3d.call(this);
};
PIXI.Container.prototype.convertSubtreeTo3d = function () {
this.convertTo3d();
for (var i = 0; i < this.children.length; i++) {
this.children[i].convertSubtreeTo3d();
}
};
})(pixi_projection || (pixi_projection = {}));