From 45572931a194358179c99b43bfb74fb804f476c9 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 31 May 2013 18:26:19 +0200 Subject: [PATCH] Draw LineStrings using drawElements This enables drawing of LineStrings with more than two coordinates. --- .../renderer/webgl/webglvectorlayer2renderer.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ol/renderer/webgl/webglvectorlayer2renderer.js b/src/ol/renderer/webgl/webglvectorlayer2renderer.js index 3322d743c9..436732107c 100644 --- a/src/ol/renderer/webgl/webglvectorlayer2renderer.js +++ b/src/ol/renderer/webgl/webglvectorlayer2renderer.js @@ -150,19 +150,27 @@ ol.renderer.webgl.VectorLayer2.prototype.renderLineStringCollections = gl.uniformMatrix4fv(this.lineStringCollectionLocations_.u_modelViewMatrix, false, this.modelViewMatrix_); - var buf, dim, i, lineStringCollection; + var buf, dim, i, indexBuffer, indices, lineStringCollection; for (i = 0; i < lineStringCollections.length; ++i) { lineStringCollection = lineStringCollections[i]; buf = lineStringCollection.buf; dim = lineStringCollection.dim; mapRenderer.bindBuffer(goog.webgl.ARRAY_BUFFER, buf); + // FIXME re-use index buffer + // FIXME use mapRenderer.bindBuffer + indices = lineStringCollection.getIndices(); + indexBuffer = gl.createBuffer(); + gl.bindBuffer(goog.webgl.ELEMENT_ARRAY_BUFFER, indexBuffer); + gl.bufferData( + goog.webgl.ELEMENT_ARRAY_BUFFER, indices, goog.webgl.DYNAMIC_DRAW); gl.enableVertexAttribArray(this.lineStringCollectionLocations_.a_position); gl.vertexAttribPointer(this.lineStringCollectionLocations_.a_position, 2, goog.webgl.FLOAT, false, 4 * dim, 0); gl.uniform4fv(this.lineStringCollectionLocations_.u_color, [1, 1, 0, 0.75]); - buf.forEachRange(function(start, stop) { - gl.drawArrays(goog.webgl.LINES, start / dim, (stop - start) / dim); - }); + gl.drawElements( + goog.webgl.LINES, indices.length, goog.webgl.UNSIGNED_SHORT, 0); + gl.bindBuffer(goog.webgl.ELEMENT_ARRAY_BUFFER, null); + gl.deleteBuffer(indexBuffer); } };