88var Class = require ( '../../../utils/Class' ) ;
99var Commands = require ( '../../../gameobjects/graphics/Commands' ) ;
1010var Earcut = require ( '../../../geom/polygon/Earcut' ) ;
11+ var GetFastValue = require ( '../../../utils/object/GetFastValue' ) ;
1112var ModelViewProjection = require ( './components/ModelViewProjection' ) ;
12- var ShaderSourceFS = require ( '../shaders/FlatTint -frag.js' ) ;
13- var ShaderSourceVS = require ( '../shaders/FlatTint -vert.js' ) ;
13+ var ShaderSourceFS = require ( '../shaders/TextureTint -frag.js' ) ;
14+ var ShaderSourceVS = require ( '../shaders/TextureTint -vert.js' ) ;
1415var TransformMatrix = require ( '../../../gameobjects/components/TransformMatrix' ) ;
1516var Utils = require ( '../Utils' ) ;
1617var WebGLPipeline = require ( '../WebGLPipeline' ) ;
@@ -70,19 +71,17 @@ var FlatTintPipeline = new Class({
7071
7172 function FlatTintPipeline ( config )
7273 {
74+ var rendererConfig = config . renderer . config ;
75+
7376 WebGLPipeline . call ( this , {
7477 game : config . game ,
7578 renderer : config . renderer ,
7679 gl : config . renderer . gl ,
77- topology : ( config . topology ? config . topology : config . renderer . gl . TRIANGLES ) ,
78- vertShader : ( config . vertShader ? config . vertShader : ShaderSourceVS ) ,
79- fragShader : ( config . fragShader ? config . fragShader : ShaderSourceFS ) ,
80- vertexCapacity : ( config . vertexCapcity ? config . vertexCapacity : 12000 ) ,
81-
82- vertexSize : ( config . vertexSize ? config . vertexSize :
83- Float32Array . BYTES_PER_ELEMENT * 2 +
84- Uint8Array . BYTES_PER_ELEMENT * 4 ) ,
85-
80+ topology : GetFastValue ( config , 'topology' , config . renderer . gl . TRIANGLES ) ,
81+ vertShader : GetFastValue ( config , 'vertShader' , ShaderSourceVS ) ,
82+ fragShader : GetFastValue ( config , 'fragShader' , ShaderSourceFS ) ,
83+ vertexCapacity : GetFastValue ( config , 'vertexCapacity' , 6 * rendererConfig . batchSize ) ,
84+ vertexSize : GetFastValue ( config , 'vertexSize' , Float32Array . BYTES_PER_ELEMENT * 5 + Uint8Array . BYTES_PER_ELEMENT * 4 ) ,
8685 attributes : [
8786 {
8887 name : 'inPosition' ,
@@ -91,12 +90,26 @@ var FlatTintPipeline = new Class({
9190 normalized : false ,
9291 offset : 0
9392 } ,
93+ {
94+ name : 'inTexCoord' ,
95+ size : 2 ,
96+ type : config . renderer . gl . FLOAT ,
97+ normalized : false ,
98+ offset : Float32Array . BYTES_PER_ELEMENT * 2
99+ } ,
100+ {
101+ name : 'inTintEffect' ,
102+ size : 1 ,
103+ type : config . renderer . gl . FLOAT ,
104+ normalized : false ,
105+ offset : Float32Array . BYTES_PER_ELEMENT * 4
106+ } ,
94107 {
95108 name : 'inTint' ,
96109 size : 4 ,
97110 type : config . renderer . gl . UNSIGNED_BYTE ,
98111 normalized : true ,
99- offset : Float32Array . BYTES_PER_ELEMENT * 2
112+ offset : Float32Array . BYTES_PER_ELEMENT * 5
100113 }
101114 ]
102115 } ) ;
@@ -222,6 +235,44 @@ var FlatTintPipeline = new Class({
222235 return this ;
223236 } ,
224237
238+ /**
239+ * Uploads the vertex data and emits a draw call
240+ * for the current batch of vertices.
241+ *
242+ * @method Phaser.Renderer.WebGL.WebGLPipeline#flush
243+ * @since 3.0.0
244+ *
245+ * @return {Phaser.Renderer.WebGL.WebGLPipeline } [description]
246+ */
247+ flush : function ( )
248+ {
249+ if ( this . flushLocked ) { return this ; }
250+
251+ this . flushLocked = true ;
252+
253+ var gl = this . gl ;
254+ var vertexCount = this . vertexCount ;
255+ var topology = this . topology ;
256+ var vertexSize = this . vertexSize ;
257+ var renderer = this . renderer ;
258+
259+ if ( vertexCount === 0 )
260+ {
261+ this . flushLocked = false ;
262+ return ;
263+ }
264+
265+ renderer . setTexture2D ( renderer . blankTexture , 0 ) ;
266+
267+ gl . bufferSubData ( gl . ARRAY_BUFFER , 0 , this . bytes . subarray ( 0 , vertexCount * vertexSize ) ) ;
268+ gl . drawArrays ( topology , 0 , vertexCount ) ;
269+
270+ this . vertexCount = 0 ;
271+ this . flushLocked = false ;
272+
273+ return this ;
274+ } ,
275+
225276 batchVertex : function ( x , y , tint )
226277 {
227278 var vertexViewF32 = this . vertexViewF32 ;
@@ -231,12 +282,9 @@ var FlatTintPipeline = new Class({
231282
232283 vertexViewF32 [ ++ vertexOffset ] = x ;
233284 vertexViewF32 [ ++ vertexOffset ] = y ;
234-
235- // For the TTP
236- // vertexViewF32[++vertexOffset] = u0;
237- // vertexViewF32[++vertexOffset] = v0;
238- // vertexViewF32[++vertexOffset] = tintEffect;
239-
285+ vertexViewF32 [ ++ vertexOffset ] = 0 ;
286+ vertexViewF32 [ ++ vertexOffset ] = 0 ;
287+ vertexViewF32 [ ++ vertexOffset ] = 0.5 ;
240288 vertexViewU32 [ ++ vertexOffset ] = tint ;
241289
242290 this . vertexCount ++ ;
@@ -251,14 +299,23 @@ var FlatTintPipeline = new Class({
251299
252300 vertexViewF32 [ ++ vertexOffset ] = x1 ;
253301 vertexViewF32 [ ++ vertexOffset ] = y1 ;
302+ vertexViewF32 [ ++ vertexOffset ] = 0 ;
303+ vertexViewF32 [ ++ vertexOffset ] = 0 ;
304+ vertexViewF32 [ ++ vertexOffset ] = 0.5 ;
254305 vertexViewU32 [ ++ vertexOffset ] = tint ;
255306
256307 vertexViewF32 [ ++ vertexOffset ] = x2 ;
257308 vertexViewF32 [ ++ vertexOffset ] = y2 ;
309+ vertexViewF32 [ ++ vertexOffset ] = 0 ;
310+ vertexViewF32 [ ++ vertexOffset ] = 0 ;
311+ vertexViewF32 [ ++ vertexOffset ] = 0.5 ;
258312 vertexViewU32 [ ++ vertexOffset ] = tint ;
259313
260314 vertexViewF32 [ ++ vertexOffset ] = x3 ;
261315 vertexViewF32 [ ++ vertexOffset ] = y3 ;
316+ vertexViewF32 [ ++ vertexOffset ] = 0 ;
317+ vertexViewF32 [ ++ vertexOffset ] = 0 ;
318+ vertexViewF32 [ ++ vertexOffset ] = 0.5 ;
262319 vertexViewU32 [ ++ vertexOffset ] = tint ;
263320
264321 this . vertexCount += 3 ;
0 commit comments