From 38920867fba371644991724f80666856967daf93 Mon Sep 17 00:00:00 2001 From: Olivier Guyot Date: Sun, 2 Jun 2019 10:33:32 +0200 Subject: [PATCH] Webgl Helper / Add a method to prepare drawing to render targets --- src/ol/webgl/Helper.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/ol/webgl/Helper.js b/src/ol/webgl/Helper.js index eb1771864f..e844e255ae 100644 --- a/src/ol/webgl/Helper.js +++ b/src/ol/webgl/Helper.js @@ -432,6 +432,30 @@ class WebGLHelper extends Disposable { gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.useProgram(this.currentProgram_); + this.applyFrameState(frameState); + this.applyUniforms(frameState); + } + + /** + * Clear the render target & bind it for future draw operations. + * This is similar to `prepareDraw`, only post processes will not be applied. + * Note: the whole viewport will be drawn to the render target, regardless of its size. + * @param {import("../PluggableMap.js").FrameState} frameState current frame state + * @param {import("./RenderTarget.js").default} renderTarget Render target to draw to + * @param {boolean} [opt_disableAlphaBlend] If true, no alpha blending will happen. + */ + prepareDrawToRenderTarget(frameState, renderTarget, opt_disableAlphaBlend) { + const gl = this.getGL(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, renderTarget.getFramebuffer()); + gl.bindTexture(gl.TEXTURE_2D, renderTarget.getTexture()); + gl.clearColor(0.0, 0.0, 0.0, 0.0); + gl.clear(gl.COLOR_BUFFER_BIT); + gl.enable(gl.BLEND); + gl.blendFunc(gl.ONE, opt_disableAlphaBlend ? gl.ZERO : gl.ONE_MINUS_SRC_ALPHA); + + gl.useProgram(this.currentProgram_); this.applyFrameState(frameState); this.applyUniforms(frameState); }