Skip to content

Commit 7c742f9

Browse files
committed
Generate multi-texture shader source
1 parent 9a45517 commit 7c742f9

1 file changed

Lines changed: 50 additions & 7 deletions

File tree

src/renderer/webgl/pipelines/TextureTintPipeline.js

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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(/%count%/gi, maxGPUTextures.toString());
80+
81+
fragmentShaderSource = fragmentShaderSource.replace(/%forloop%/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

Comments
 (0)