mirror of
https://github.com/photonstorm/phaser
synced 2024-11-24 05:33:35 +00:00
Moving towards tidying up the FTP
This commit is contained in:
parent
d50d8b5e6b
commit
ac108db9cc
3 changed files with 123 additions and 117 deletions
|
@ -11,6 +11,7 @@ var Earcut = require('../../../geom/polygon/Earcut');
|
||||||
var ModelViewProjection = require('./components/ModelViewProjection');
|
var ModelViewProjection = require('./components/ModelViewProjection');
|
||||||
var ShaderSourceFS = require('../shaders/FlatTint-frag.js');
|
var ShaderSourceFS = require('../shaders/FlatTint-frag.js');
|
||||||
var ShaderSourceVS = require('../shaders/FlatTint-vert.js');
|
var ShaderSourceVS = require('../shaders/FlatTint-vert.js');
|
||||||
|
var TransformMatrix = require('../../../gameobjects/components/TransformMatrix');
|
||||||
var Utils = require('../Utils');
|
var Utils = require('../Utils');
|
||||||
var WebGLPipeline = require('../WebGLPipeline');
|
var WebGLPipeline = require('../WebGLPipeline');
|
||||||
|
|
||||||
|
@ -142,6 +143,46 @@ var FlatTintPipeline = new Class({
|
||||||
*/
|
*/
|
||||||
this.polygonCache = [];
|
this.polygonCache = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A temporary Transform Matrix, re-used internally during batching.
|
||||||
|
*
|
||||||
|
* @name Phaser.Renderer.WebGL.Pipelines.FlatTintPipeline#_tempMatrix1
|
||||||
|
* @private
|
||||||
|
* @type {Phaser.GameObjects.Components.TransformMatrix}
|
||||||
|
* @since 3.12.0
|
||||||
|
*/
|
||||||
|
this._tempMatrix1 = new TransformMatrix();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A temporary Transform Matrix, re-used internally during batching.
|
||||||
|
*
|
||||||
|
* @name Phaser.Renderer.WebGL.Pipelines.FlatTintPipeline#_tempMatrix2
|
||||||
|
* @private
|
||||||
|
* @type {Phaser.GameObjects.Components.TransformMatrix}
|
||||||
|
* @since 3.12.0
|
||||||
|
*/
|
||||||
|
this._tempMatrix2 = new TransformMatrix();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A temporary Transform Matrix, re-used internally during batching.
|
||||||
|
*
|
||||||
|
* @name Phaser.Renderer.WebGL.Pipelines.FlatTintPipeline#_tempMatrix3
|
||||||
|
* @private
|
||||||
|
* @type {Phaser.GameObjects.Components.TransformMatrix}
|
||||||
|
* @since 3.12.0
|
||||||
|
*/
|
||||||
|
this._tempMatrix3 = new TransformMatrix();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A temporary Transform Matrix, re-used internally during batching.
|
||||||
|
*
|
||||||
|
* @name Phaser.Renderer.WebGL.Pipelines.FlatTintPipeline#_tempMatrix4
|
||||||
|
* @private
|
||||||
|
* @type {Phaser.GameObjects.Components.TransformMatrix}
|
||||||
|
* @since 3.12.0
|
||||||
|
*/
|
||||||
|
this._tempMatrix4 = new TransformMatrix();
|
||||||
|
|
||||||
this.mvpInit();
|
this.mvpInit();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -181,6 +222,48 @@ var FlatTintPipeline = new Class({
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
batchVertex: function (x, y, tint)
|
||||||
|
{
|
||||||
|
var vertexViewF32 = this.vertexViewF32;
|
||||||
|
var vertexViewU32 = this.vertexViewU32;
|
||||||
|
|
||||||
|
var vertexOffset = (this.vertexCount * this.vertexComponentCount) - 1;
|
||||||
|
|
||||||
|
vertexViewF32[++vertexOffset] = x;
|
||||||
|
vertexViewF32[++vertexOffset] = y;
|
||||||
|
|
||||||
|
// For the TTP
|
||||||
|
// vertexViewF32[++vertexOffset] = u0;
|
||||||
|
// vertexViewF32[++vertexOffset] = v0;
|
||||||
|
// vertexViewF32[++vertexOffset] = tintEffect;
|
||||||
|
|
||||||
|
vertexViewU32[++vertexOffset] = tint;
|
||||||
|
|
||||||
|
this.vertexCount++;
|
||||||
|
},
|
||||||
|
|
||||||
|
batchTri: function (x1, y1, x2, y2, x3, y3, tint)
|
||||||
|
{
|
||||||
|
var vertexViewF32 = this.vertexViewF32;
|
||||||
|
var vertexViewU32 = this.vertexViewU32;
|
||||||
|
|
||||||
|
var vertexOffset = (this.vertexCount * this.vertexComponentCount) - 1;
|
||||||
|
|
||||||
|
vertexViewF32[++vertexOffset] = x1;
|
||||||
|
vertexViewF32[++vertexOffset] = y1;
|
||||||
|
vertexViewU32[++vertexOffset] = tint;
|
||||||
|
|
||||||
|
vertexViewF32[++vertexOffset] = x2;
|
||||||
|
vertexViewF32[++vertexOffset] = y2;
|
||||||
|
vertexViewU32[++vertexOffset] = tint;
|
||||||
|
|
||||||
|
vertexViewF32[++vertexOffset] = x3;
|
||||||
|
vertexViewF32[++vertexOffset] = y3;
|
||||||
|
vertexViewU32[++vertexOffset] = tint;
|
||||||
|
|
||||||
|
this.vertexCount += 3;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pushes a rectangle into the vertex batch
|
* Pushes a rectangle into the vertex batch
|
||||||
*
|
*
|
||||||
|
@ -215,9 +298,6 @@ var FlatTintPipeline = new Class({
|
||||||
this.flush();
|
this.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
var vertexViewF32 = this.vertexViewF32;
|
|
||||||
var vertexViewU32 = this.vertexViewU32;
|
|
||||||
var vertexOffset = this.vertexCount * this.vertexComponentCount;
|
|
||||||
var xw = x + width;
|
var xw = x + width;
|
||||||
var yh = y + height;
|
var yh = y + height;
|
||||||
var a0 = currentMatrix[0];
|
var a0 = currentMatrix[0];
|
||||||
|
@ -242,31 +322,8 @@ var FlatTintPipeline = new Class({
|
||||||
var ty3 = xw * b + y * d + f;
|
var ty3 = xw * b + y * d + f;
|
||||||
var tint = Utils.getTintAppendFloatAlphaAndSwap(fillColor, fillAlpha);
|
var tint = Utils.getTintAppendFloatAlphaAndSwap(fillColor, fillAlpha);
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 0] = tx0;
|
this.batchTri(tx0, ty0, tx1, ty1, tx2, ty2, tint);
|
||||||
vertexViewF32[vertexOffset + 1] = ty0;
|
this.batchTri(tx0, ty0, tx2, ty2, tx3, ty3, tint);
|
||||||
vertexViewU32[vertexOffset + 2] = tint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 3] = tx1;
|
|
||||||
vertexViewF32[vertexOffset + 4] = ty1;
|
|
||||||
vertexViewU32[vertexOffset + 5] = tint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 6] = tx2;
|
|
||||||
vertexViewF32[vertexOffset + 7] = ty2;
|
|
||||||
vertexViewU32[vertexOffset + 8] = tint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 9] = tx0;
|
|
||||||
vertexViewF32[vertexOffset + 10] = ty0;
|
|
||||||
vertexViewU32[vertexOffset + 11] = tint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 12] = tx2;
|
|
||||||
vertexViewF32[vertexOffset + 13] = ty2;
|
|
||||||
vertexViewU32[vertexOffset + 14] = tint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 15] = tx3;
|
|
||||||
vertexViewF32[vertexOffset + 16] = ty3;
|
|
||||||
vertexViewU32[vertexOffset + 17] = tint;
|
|
||||||
|
|
||||||
this.vertexCount += 6;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -305,9 +362,6 @@ var FlatTintPipeline = new Class({
|
||||||
this.flush();
|
this.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
var vertexViewF32 = this.vertexViewF32;
|
|
||||||
var vertexViewU32 = this.vertexViewU32;
|
|
||||||
var vertexOffset = this.vertexCount * this.vertexComponentCount;
|
|
||||||
var a0 = currentMatrix[0];
|
var a0 = currentMatrix[0];
|
||||||
var b0 = currentMatrix[1];
|
var b0 = currentMatrix[1];
|
||||||
var c0 = currentMatrix[2];
|
var c0 = currentMatrix[2];
|
||||||
|
@ -328,19 +382,7 @@ var FlatTintPipeline = new Class({
|
||||||
var ty2 = x2 * b + y2 * d + f;
|
var ty2 = x2 * b + y2 * d + f;
|
||||||
var tint = Utils.getTintAppendFloatAlphaAndSwap(fillColor, fillAlpha);
|
var tint = Utils.getTintAppendFloatAlphaAndSwap(fillColor, fillAlpha);
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 0] = tx0;
|
this.batchTri(tx0, ty0, tx1, ty1, tx2, ty2, tint);
|
||||||
vertexViewF32[vertexOffset + 1] = ty0;
|
|
||||||
vertexViewU32[vertexOffset + 2] = tint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 3] = tx1;
|
|
||||||
vertexViewF32[vertexOffset + 4] = ty1;
|
|
||||||
vertexViewU32[vertexOffset + 5] = tint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 6] = tx2;
|
|
||||||
vertexViewF32[vertexOffset + 7] = ty2;
|
|
||||||
vertexViewU32[vertexOffset + 8] = tint;
|
|
||||||
|
|
||||||
this.vertexCount += 3;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -436,9 +478,6 @@ var FlatTintPipeline = new Class({
|
||||||
var polygonIndexArray;
|
var polygonIndexArray;
|
||||||
var point;
|
var point;
|
||||||
var v0, v1, v2;
|
var v0, v1, v2;
|
||||||
var vertexViewF32 = this.vertexViewF32;
|
|
||||||
var vertexViewU32 = this.vertexViewU32;
|
|
||||||
var vertexOffset = 0;
|
|
||||||
var x0, y0, x1, y1, x2, y2;
|
var x0, y0, x1, y1, x2, y2;
|
||||||
var tx0, ty0, tx1, ty1, tx2, ty2;
|
var tx0, ty0, tx1, ty1, tx2, ty2;
|
||||||
var a0 = currentMatrix[0];
|
var a0 = currentMatrix[0];
|
||||||
|
@ -475,8 +514,6 @@ var FlatTintPipeline = new Class({
|
||||||
this.flush();
|
this.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
vertexOffset = this.vertexCount * this.vertexComponentCount;
|
|
||||||
|
|
||||||
x0 = polygonCache[v0 + 0];
|
x0 = polygonCache[v0 + 0];
|
||||||
y0 = polygonCache[v0 + 1];
|
y0 = polygonCache[v0 + 1];
|
||||||
x1 = polygonCache[v1 + 0];
|
x1 = polygonCache[v1 + 0];
|
||||||
|
@ -491,19 +528,7 @@ var FlatTintPipeline = new Class({
|
||||||
tx2 = x2 * a + y2 * c + e;
|
tx2 = x2 * a + y2 * c + e;
|
||||||
ty2 = x2 * b + y2 * d + f;
|
ty2 = x2 * b + y2 * d + f;
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 0] = tx0;
|
this.batchTri(tx0, ty0, tx1, ty1, tx2, ty2, tint);
|
||||||
vertexViewF32[vertexOffset + 1] = ty0;
|
|
||||||
vertexViewU32[vertexOffset + 2] = tint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 3] = tx1;
|
|
||||||
vertexViewF32[vertexOffset + 4] = ty1;
|
|
||||||
vertexViewU32[vertexOffset + 5] = tint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 6] = tx2;
|
|
||||||
vertexViewF32[vertexOffset + 7] = ty2;
|
|
||||||
vertexViewU32[vertexOffset + 8] = tint;
|
|
||||||
|
|
||||||
this.vertexCount += 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
polygonCache.length = 0;
|
polygonCache.length = 0;
|
||||||
|
@ -541,9 +566,6 @@ var FlatTintPipeline = new Class({
|
||||||
var pathLength = path.length;
|
var pathLength = path.length;
|
||||||
var polylines = this.polygonCache;
|
var polylines = this.polygonCache;
|
||||||
var last, curr;
|
var last, curr;
|
||||||
var vertexViewF32 = this.vertexViewF32;
|
|
||||||
var vertexViewU32 = this.vertexViewU32;
|
|
||||||
var vertexOffset;
|
|
||||||
var line;
|
var line;
|
||||||
var getTint = Utils.getTintAppendFloatAlphaAndSwap;
|
var getTint = Utils.getTintAppendFloatAlphaAndSwap;
|
||||||
|
|
||||||
|
@ -575,33 +597,37 @@ var FlatTintPipeline = new Class({
|
||||||
|
|
||||||
last = polylines[index - 1] || polylines[polylinesLength - 1];
|
last = polylines[index - 1] || polylines[polylinesLength - 1];
|
||||||
curr = polylines[index];
|
curr = polylines[index];
|
||||||
vertexOffset = this.vertexCount * this.vertexComponentCount;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 0] = last[3 * 2 + 0];
|
var tx0 = last[3 * 2 + 0];
|
||||||
vertexViewF32[vertexOffset + 1] = last[3 * 2 + 1];
|
var ty0 = last[3 * 2 + 1];
|
||||||
vertexViewU32[vertexOffset + 2] = getTint(last[3 * 2 + 2], lineAlpha);
|
var tint0 = getTint(last[3 * 2 + 2], lineAlpha);
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 3] = last[3 * 0 + 0];
|
var tx1 = last[3 * 0 + 0];
|
||||||
vertexViewF32[vertexOffset + 4] = last[3 * 0 + 1];
|
var ty1 = last[3 * 0 + 1];
|
||||||
vertexViewU32[vertexOffset + 5] = getTint(last[3 * 0 + 2], lineAlpha);
|
var tint1 = getTint(last[3 * 0 + 2], lineAlpha);
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 6] = curr[3 * 3 + 0];
|
var tx2 = curr[3 * 3 + 0];
|
||||||
vertexViewF32[vertexOffset + 7] = curr[3 * 3 + 1];
|
var ty2 = curr[3 * 3 + 1];
|
||||||
vertexViewU32[vertexOffset + 8] = getTint(curr[3 * 3 + 2], lineAlpha);
|
var tint2 = getTint(curr[3 * 3 + 2], lineAlpha);
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 9] = last[3 * 0 + 0];
|
// var tx3 = last[3 * 0 + 0]; //tx1
|
||||||
vertexViewF32[vertexOffset + 10] = last[3 * 0 + 1];
|
// var ty3 = last[3 * 0 + 1]; //ty1
|
||||||
vertexViewU32[vertexOffset + 11] = getTint(last[3 * 0 + 2], lineAlpha);
|
// var tint3 = getTint(last[3 * 0 + 2], lineAlpha); //tint1
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 12] = last[3 * 2 + 0];
|
// var tx4 = last[3 * 2 + 0]; //tx0
|
||||||
vertexViewF32[vertexOffset + 13] = last[3 * 2 + 1];
|
// var ty4 = last[3 * 2 + 1]; //ty0
|
||||||
vertexViewU32[vertexOffset + 14] = getTint(last[3 * 2 + 2], lineAlpha);
|
// var tint4 = getTint(last[3 * 2 + 2], lineAlpha); //tint0
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 15] = curr[3 * 1 + 0];
|
var tx5 = curr[3 * 1 + 0];
|
||||||
vertexViewF32[vertexOffset + 16] = curr[3 * 1 + 1];
|
var ty5 = curr[3 * 1 + 1];
|
||||||
vertexViewU32[vertexOffset + 17] = getTint(curr[3 * 1 + 2], lineAlpha);
|
var tint5 = getTint(curr[3 * 1 + 2], lineAlpha);
|
||||||
|
|
||||||
this.vertexCount += 6;
|
this.batchVertex(tx0, ty0, tint0);
|
||||||
|
this.batchVertex(tx1, ty1, tint1);
|
||||||
|
this.batchVertex(tx2, ty2, tint2);
|
||||||
|
this.batchVertex(tx1, ty1, tint1);
|
||||||
|
this.batchVertex(tx0, ty0, tint0);
|
||||||
|
this.batchVertex(tx5, ty5, tint5);
|
||||||
}
|
}
|
||||||
|
|
||||||
polylines.length = 0;
|
polylines.length = 0;
|
||||||
|
@ -656,8 +682,6 @@ var FlatTintPipeline = new Class({
|
||||||
var d = c1 * b0 + d1 * d0;
|
var d = c1 * b0 + d1 * d0;
|
||||||
var e = e1 * a0 + f1 * c0 + e0;
|
var e = e1 * a0 + f1 * c0 + e0;
|
||||||
var f = e1 * b0 + f1 * d0 + f0;
|
var f = e1 * b0 + f1 * d0 + f0;
|
||||||
var vertexViewF32 = this.vertexViewF32;
|
|
||||||
var vertexViewU32 = this.vertexViewU32;
|
|
||||||
var dx = bx - ax;
|
var dx = bx - ax;
|
||||||
var dy = by - ay;
|
var dy = by - ay;
|
||||||
var len = Math.sqrt(dx * dx + dy * dy);
|
var len = Math.sqrt(dx * dx + dy * dy);
|
||||||
|
@ -684,33 +708,13 @@ var FlatTintPipeline = new Class({
|
||||||
var getTint = Utils.getTintAppendFloatAlphaAndSwap;
|
var getTint = Utils.getTintAppendFloatAlphaAndSwap;
|
||||||
var aTint = getTint(aLineColor, lineAlpha);
|
var aTint = getTint(aLineColor, lineAlpha);
|
||||||
var bTint = getTint(bLineColor, lineAlpha);
|
var bTint = getTint(bLineColor, lineAlpha);
|
||||||
var vertexOffset = this.vertexCount * this.vertexComponentCount;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 0] = x0;
|
this.batchVertex(x0, y0, bTint);
|
||||||
vertexViewF32[vertexOffset + 1] = y0;
|
this.batchVertex(x1, y1, aTint);
|
||||||
vertexViewU32[vertexOffset + 2] = bTint;
|
this.batchVertex(x2, y2, bTint);
|
||||||
|
this.batchVertex(x1, y1, aTint);
|
||||||
vertexViewF32[vertexOffset + 3] = x1;
|
this.batchVertex(x3, y3, aTint);
|
||||||
vertexViewF32[vertexOffset + 4] = y1;
|
this.batchVertex(x2, y2, bTint);
|
||||||
vertexViewU32[vertexOffset + 5] = aTint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 6] = x2;
|
|
||||||
vertexViewF32[vertexOffset + 7] = y2;
|
|
||||||
vertexViewU32[vertexOffset + 8] = bTint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 9] = x1;
|
|
||||||
vertexViewF32[vertexOffset + 10] = y1;
|
|
||||||
vertexViewU32[vertexOffset + 11] = aTint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 12] = x3;
|
|
||||||
vertexViewF32[vertexOffset + 13] = y3;
|
|
||||||
vertexViewU32[vertexOffset + 14] = aTint;
|
|
||||||
|
|
||||||
vertexViewF32[vertexOffset + 15] = x2;
|
|
||||||
vertexViewF32[vertexOffset + 16] = y2;
|
|
||||||
vertexViewU32[vertexOffset + 17] = bTint;
|
|
||||||
|
|
||||||
this.vertexCount += 6;
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
x0, y0, bLineColor,
|
x0, y0, bLineColor,
|
||||||
|
|
|
@ -11,15 +11,16 @@ module.exports = [
|
||||||
'',
|
'',
|
||||||
'void main()',
|
'void main()',
|
||||||
'{',
|
'{',
|
||||||
' vec4 texel = texture2D(uMainSampler, outTexCoord);',
|
' vec4 texel = vec4(outTint.rgb * outTint.a, outTint.a);',
|
||||||
'',
|
'',
|
||||||
' if (outTintEffect == 1.0)',
|
' if (outTintEffect == 1.0)',
|
||||||
' {',
|
' {',
|
||||||
|
' texel = texture2D(uMainSampler, outTexCoord);',
|
||||||
' texel.rgb = mix(texel.rgb, outTint.rgb, texel.a);',
|
' texel.rgb = mix(texel.rgb, outTint.rgb, texel.a);',
|
||||||
' }',
|
' }',
|
||||||
' else',
|
' else',
|
||||||
' {',
|
' {',
|
||||||
' texel *= vec4(outTint.rgb * outTint.a, outTint.a);',
|
' texel *= texture2D(uMainSampler, outTexCoord);',
|
||||||
' }',
|
' }',
|
||||||
'',
|
'',
|
||||||
' gl_FragColor = texel;',
|
' gl_FragColor = texel;',
|
||||||
|
|
|
@ -10,15 +10,16 @@ varying vec4 outTint;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 texel = texture2D(uMainSampler, outTexCoord);
|
vec4 texel = vec4(outTint.rgb * outTint.a, outTint.a);
|
||||||
|
|
||||||
if (outTintEffect == 1.0)
|
if (outTintEffect == 1.0)
|
||||||
{
|
{
|
||||||
|
texel = texture2D(uMainSampler, outTexCoord);
|
||||||
texel.rgb = mix(texel.rgb, outTint.rgb, texel.a);
|
texel.rgb = mix(texel.rgb, outTint.rgb, texel.a);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
texel *= vec4(outTint.rgb * outTint.a, outTint.a);
|
texel *= texture2D(uMainSampler, outTexCoord);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = texel;
|
gl_FragColor = texel;
|
||||||
|
|
Loading…
Reference in a new issue