3931 lines
165 KiB
JavaScript
Executable File
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 = {}));
|