Skip to content

Commit 56caeb1

Browse files
committed
Renders whole buffer in a single draw with no vertex iteration
1 parent 1d2a8bc commit 56caeb1

1 file changed

Lines changed: 11 additions & 37 deletions

File tree

src/renderer/webgl/pipelines/MeshPipeline.js

Lines changed: 11 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var MeshPipeline = new Class({
3434

3535
config.fragShader = GetFastValue(config, 'fragShader', ShaderSourceFS),
3636
config.vertShader = GetFastValue(config, 'vertShader', ShaderSourceVS),
37-
config.vertexCapacity = GetFastValue(config, 'vertexCapacity', 2048 * 8),
37+
config.vertexCapacity = GetFastValue(config, 'vertexCapacity', 8),
3838
config.vertexSize = GetFastValue(config, 'vertexSize', 32),
3939
config.attributes = GetFastValue(config, 'attributes', [
4040
{
@@ -68,15 +68,6 @@ var MeshPipeline = new Class({
6868

6969
WebGLPipeline.call(this, config);
7070

71-
/**
72-
* Float32 view of the array buffer containing the pipeline's vertices.
73-
*
74-
* @name Phaser.Renderer.WebGL.Pipelines.MeshPipeline#vertexViewF32
75-
* @type {Float32Array}
76-
* @since 3.0.0
77-
*/
78-
this.vertexViewF32 = new Float32Array(this.vertexData);
79-
8071
this.forceZero = true;
8172
},
8273

@@ -134,7 +125,12 @@ var MeshPipeline = new Class({
134125
renderer.setFloat3(program, 'uLightAmbient', light.ambient.x, light.ambient.y, light.ambient.z);
135126
renderer.setFloat3(program, 'uLightDiffuse', light.diffuse.x, light.diffuse.y, light.diffuse.z);
136127
renderer.setFloat3(program, 'uLightSpecular', light.specular.x, light.specular.y, light.specular.z);
128+
137129
renderer.setFloat3(program, 'uCameraPosition', camera.x, camera.y, camera.z);
130+
131+
renderer.setFloat3(program, 'uFogColor', mesh.fogColor.r, mesh.fogColor.g, mesh.fogColor.b);
132+
renderer.setFloat1(program, 'uFogNear', mesh.forNear);
133+
renderer.setFloat1(program, 'uFogFar', mesh.forFar);
138134
},
139135

140136
drawModel: function (mesh, model)
@@ -153,36 +149,14 @@ var MeshPipeline = new Class({
153149
renderer.setTextureZero(model.frame.glTexture);
154150
renderer.setInt1(program, 'uTexture', 0);
155151

156-
// All the uniforms are finally bound, so now lets draw our faces!
152+
// All the uniforms are finally bound, so let's buffer our data
157153

158-
var vertexViewF32 = this.vertexViewF32;
159-
160-
var vertices = model.vertices;
161-
162-
for (var i = 0; i < vertices.length; i++)
163-
{
164-
if (this.shouldFlush(1))
165-
{
166-
this.flush();
167-
}
168-
169-
var vertexOffset = (this.vertexCount * this.vertexComponentCount) - 1;
170-
171-
var vert = vertices[i];
172-
173-
vertexViewF32[++vertexOffset] = vert.x;
174-
vertexViewF32[++vertexOffset] = vert.y;
175-
vertexViewF32[++vertexOffset] = vert.z;
176-
vertexViewF32[++vertexOffset] = vert.nx;
177-
vertexViewF32[++vertexOffset] = vert.ny;
178-
vertexViewF32[++vertexOffset] = vert.nz;
179-
vertexViewF32[++vertexOffset] = vert.u;
180-
vertexViewF32[++vertexOffset] = vert.v;
154+
var gl = this.gl;
181155

182-
this.vertexCount++;
183-
}
156+
// STATIC because the buffer data doesn't change, the uniforms do
157+
gl.bufferData(gl.ARRAY_BUFFER, model.vertexData, gl.STATIC_DRAW);
184158

185-
this.flush();
159+
gl.drawArrays(this.topology, 0, model.vertexCount);
186160
}
187161

188162
});

0 commit comments

Comments
 (0)