diff --git a/src/ol/render/webgl/polygonreplay/index.js b/src/ol/render/webgl/polygonreplay/index.js index 36b5b13ab5..937d87ed9a 100644 --- a/src/ol/render/webgl/polygonreplay/index.js +++ b/src/ol/render/webgl/polygonreplay/index.js @@ -870,6 +870,16 @@ ol.render.webgl.PolygonReplay.prototype.shutDownProgram = function(gl, locations * @inheritDoc */ ol.render.webgl.PolygonReplay.prototype.drawReplay = function(gl, context, skippedFeaturesHash, hitDetection) { + //Save GL parameters. + var tmpDepthFunc = /** @type {number} */ (gl.getParameter(gl.DEPTH_FUNC)); + var tmpDepthMask = /** @type {boolean} */ (gl.getParameter(gl.DEPTH_WRITEMASK)); + + if (!hitDetection) { + gl.enable(gl.DEPTH_TEST); + gl.depthMask(true); + gl.depthFunc(gl.NOTEQUAL); + } + if (!ol.obj.isEmpty(skippedFeaturesHash)) { this.drawReplaySkipping_(gl, context, skippedFeaturesHash); } else { @@ -887,6 +897,13 @@ ol.render.webgl.PolygonReplay.prototype.drawReplay = function(gl, context, skipp end = start; } } + if (!hitDetection) { + gl.disable(gl.DEPTH_TEST); + gl.clear(gl.DEPTH_BUFFER_BIT); + //Restore GL parameters. + gl.depthMask(tmpDepthMask); + gl.depthFunc(tmpDepthFunc); + } }; @@ -964,6 +981,7 @@ ol.render.webgl.PolygonReplay.prototype.drawReplaySkipping_ = function(gl, conte if (skippedFeaturesHash[featureUid]) { if (start !== end) { this.drawElements(gl, context, start, end); + gl.clear(gl.DEPTH_BUFFER_BIT); } end = featureStart; } @@ -972,6 +990,7 @@ ol.render.webgl.PolygonReplay.prototype.drawReplaySkipping_ = function(gl, conte } if (start !== end) { this.drawElements(gl, context, start, end); + gl.clear(gl.DEPTH_BUFFER_BIT); } start = end = groupStart; } diff --git a/test/spec/ol/render/webgl/polygonreplay.test.js b/test/spec/ol/render/webgl/polygonreplay.test.js index 62f7f8e1cd..e6b4e55064 100644 --- a/test/spec/ol/render/webgl/polygonreplay.test.js +++ b/test/spec/ol/render/webgl/polygonreplay.test.js @@ -406,7 +406,14 @@ describe('ol.render.webgl.PolygonReplay', function() { geometry: new ol.geom.Polygon([[[0, 0], [500, 500], [500, 0], [0, 0]]]) }); beforeEach(function() { - gl = {}; + gl = { + getParameter: function() {}, + enable: function() {}, + disable: function() {}, + depthMask: function() {}, + depthFunc: function() {}, + clear: function() {} + }; context = {}; replay.setFillStyle_ = function() {}; replay.drawElements = function() {};