@@ -53,16 +53,43 @@ var TextureTintPipeline = new Class({
5353 var rendererConfig = config . renderer . config ;
5454
5555 // Vertex Size = attribute size added together (2 + 2 + 1 + 4)
56+ // Vertex Size = attribute size added together (2 + 2 + 1 + 1 + 4) inc maxGPU
57+
58+ var maxGPUTextures = GetFastValue ( config , 'maxGPUTextures' , 0 ) ;
59+
60+ var src = '' ;
61+
62+ for ( var i = 0 ; i < maxGPUTextures ; i ++ )
63+ {
64+ if ( i > 0 )
65+ {
66+ src += '\n\telse ' ;
67+ }
68+
69+ if ( i < maxGPUTextures - 1 )
70+ {
71+ src += 'if (outTexId < ' + i + '.5)' ;
72+ }
73+
74+ src += '\n\t{' ;
75+ src += '\n\t\ttexture = texture2D(uMainSampler[' + i + '], outTexCoord);' ;
76+ src += '\n\t}' ;
77+ }
78+
79+ var fragmentShaderSource = ShaderSourceFS . replace ( / % c o u n t % / gi, maxGPUTextures . toString ( ) ) ;
80+
81+ fragmentShaderSource = fragmentShaderSource . replace ( / % f o r l o o p % / gi, src ) ;
5682
5783 WebGLPipeline . call ( this , {
5884 game : config . game ,
5985 renderer : config . renderer ,
6086 gl : config . renderer . gl ,
6187 topology : GetFastValue ( config , 'topology' , config . renderer . gl . TRIANGLES ) ,
6288 vertShader : GetFastValue ( config , 'vertShader' , ShaderSourceVS ) ,
63- fragShader : GetFastValue ( config , 'fragShader' , ShaderSourceFS ) ,
64- vertexCapacity : GetFastValue ( config , 'vertexCapacity' , 6 * rendererConfig . batchSize ) ,
65- vertexSize : GetFastValue ( config , 'vertexSize' , Float32Array . BYTES_PER_ELEMENT * 5 + Uint8Array . BYTES_PER_ELEMENT * 4 ) ,
89+ fragShader : GetFastValue ( config , 'fragShader' , fragmentShaderSource ) ,
90+ vertexCapacity : GetFastValue ( config , 'vertexCapacity' , 7 * rendererConfig . batchSize ) ,
91+ vertexSize : GetFastValue ( config , 'vertexSize' , Float32Array . BYTES_PER_ELEMENT * 6 + Uint8Array . BYTES_PER_ELEMENT * 4 ) ,
92+ maxGPUTextures : maxGPUTextures ,
6693 attributes : [
6794 {
6895 name : 'inPosition' ,
@@ -76,21 +103,28 @@ var TextureTintPipeline = new Class({
76103 size : 2 ,
77104 type : config . renderer . gl . FLOAT ,
78105 normalized : false ,
79- offset : Float32Array . BYTES_PER_ELEMENT * 2
106+ offset : 4 * 2
107+ } ,
108+ {
109+ name : 'inTexID' ,
110+ size : 1 ,
111+ type : config . renderer . gl . FLOAT ,
112+ normalized : false ,
113+ offset : 4 * 4
80114 } ,
81115 {
82116 name : 'inTintEffect' ,
83117 size : 1 ,
84118 type : config . renderer . gl . FLOAT ,
85119 normalized : false ,
86- offset : Float32Array . BYTES_PER_ELEMENT * 4
120+ offset : 4 * 5
87121 } ,
88122 {
89123 name : 'inTint' ,
90124 size : 4 ,
91125 type : config . renderer . gl . UNSIGNED_BYTE ,
92126 normalized : true ,
93- offset : Float32Array . BYTES_PER_ELEMENT * 5
127+ offset : 4 * 6
94128 }
95129 ]
96130 } ) ;
@@ -298,7 +332,7 @@ var TextureTintPipeline = new Class({
298332 {
299333 WebGLPipeline . prototype . resize . call ( this , width , height , resolution ) ;
300334
301- ProjectOrtho ( this , 0 , this . width , this . height , 0 , - 1000.0 , 1000.0 ) ;
335+ ProjectOrtho ( this , 0 , this . width , this . height , 0 , - 1000 , 1000 ) ;
302336
303337 return this ;
304338 } ,
@@ -721,41 +755,47 @@ var TextureTintPipeline = new Class({
721755 vertexViewF32 [ ++ vertexOffset ] = y0 ;
722756 vertexViewF32 [ ++ vertexOffset ] = u0 ;
723757 vertexViewF32 [ ++ vertexOffset ] = v0 ;
758+ vertexViewF32 [ ++ vertexOffset ] = unit ;
724759 vertexViewF32 [ ++ vertexOffset ] = tintEffect ;
725760 vertexViewU32 [ ++ vertexOffset ] = tintTL ;
726761
727762 vertexViewF32 [ ++ vertexOffset ] = x1 ;
728763 vertexViewF32 [ ++ vertexOffset ] = y1 ;
729764 vertexViewF32 [ ++ vertexOffset ] = u0 ;
730765 vertexViewF32 [ ++ vertexOffset ] = v1 ;
766+ vertexViewF32 [ ++ vertexOffset ] = unit ;
731767 vertexViewF32 [ ++ vertexOffset ] = tintEffect ;
732768 vertexViewU32 [ ++ vertexOffset ] = tintBL ;
733769
734770 vertexViewF32 [ ++ vertexOffset ] = x2 ;
735771 vertexViewF32 [ ++ vertexOffset ] = y2 ;
736772 vertexViewF32 [ ++ vertexOffset ] = u1 ;
737773 vertexViewF32 [ ++ vertexOffset ] = v1 ;
774+ vertexViewF32 [ ++ vertexOffset ] = unit ;
738775 vertexViewF32 [ ++ vertexOffset ] = tintEffect ;
739776 vertexViewU32 [ ++ vertexOffset ] = tintBR ;
740777
741778 vertexViewF32 [ ++ vertexOffset ] = x0 ;
742779 vertexViewF32 [ ++ vertexOffset ] = y0 ;
743780 vertexViewF32 [ ++ vertexOffset ] = u0 ;
744781 vertexViewF32 [ ++ vertexOffset ] = v0 ;
782+ vertexViewF32 [ ++ vertexOffset ] = unit ;
745783 vertexViewF32 [ ++ vertexOffset ] = tintEffect ;
746784 vertexViewU32 [ ++ vertexOffset ] = tintTL ;
747785
748786 vertexViewF32 [ ++ vertexOffset ] = x2 ;
749787 vertexViewF32 [ ++ vertexOffset ] = y2 ;
750788 vertexViewF32 [ ++ vertexOffset ] = u1 ;
751789 vertexViewF32 [ ++ vertexOffset ] = v1 ;
790+ vertexViewF32 [ ++ vertexOffset ] = unit ;
752791 vertexViewF32 [ ++ vertexOffset ] = tintEffect ;
753792 vertexViewU32 [ ++ vertexOffset ] = tintBR ;
754793
755794 vertexViewF32 [ ++ vertexOffset ] = x3 ;
756795 vertexViewF32 [ ++ vertexOffset ] = y3 ;
757796 vertexViewF32 [ ++ vertexOffset ] = u1 ;
758797 vertexViewF32 [ ++ vertexOffset ] = v0 ;
798+ vertexViewF32 [ ++ vertexOffset ] = unit ;
759799 vertexViewF32 [ ++ vertexOffset ] = tintEffect ;
760800 vertexViewU32 [ ++ vertexOffset ] = tintTR ;
761801
@@ -823,20 +863,23 @@ var TextureTintPipeline = new Class({
823863 vertexViewF32 [ ++ vertexOffset ] = y1 ;
824864 vertexViewF32 [ ++ vertexOffset ] = u0 ;
825865 vertexViewF32 [ ++ vertexOffset ] = v0 ;
866+ vertexViewF32 [ ++ vertexOffset ] = unit ;
826867 vertexViewF32 [ ++ vertexOffset ] = tintEffect ;
827868 vertexViewU32 [ ++ vertexOffset ] = tintTL ;
828869
829870 vertexViewF32 [ ++ vertexOffset ] = x2 ;
830871 vertexViewF32 [ ++ vertexOffset ] = y2 ;
831872 vertexViewF32 [ ++ vertexOffset ] = u0 ;
832873 vertexViewF32 [ ++ vertexOffset ] = v1 ;
874+ vertexViewF32 [ ++ vertexOffset ] = unit ;
833875 vertexViewF32 [ ++ vertexOffset ] = tintEffect ;
834876 vertexViewU32 [ ++ vertexOffset ] = tintTR ;
835877
836878 vertexViewF32 [ ++ vertexOffset ] = x3 ;
837879 vertexViewF32 [ ++ vertexOffset ] = y3 ;
838880 vertexViewF32 [ ++ vertexOffset ] = u1 ;
839881 vertexViewF32 [ ++ vertexOffset ] = v1 ;
882+ vertexViewF32 [ ++ vertexOffset ] = unit ;
840883 vertexViewF32 [ ++ vertexOffset ] = tintEffect ;
841884 vertexViewU32 [ ++ vertexOffset ] = tintBL ;
842885
0 commit comments