diff --git a/packages/melonjs/src/renderable/light2d.js b/packages/melonjs/src/renderable/light2d.js index c5086f43c8..f26393c801 100644 --- a/packages/melonjs/src/renderable/light2d.js +++ b/packages/melonjs/src/renderable/light2d.js @@ -174,6 +174,17 @@ export default class Light2d extends Renderable { return true; } + /** + * preDraw this Light2d (automatically called by melonJS) + * Note: The renderer should set the blend mode again (after drawing other Light2d objects) + * to ensure colors blend correctly in the CanvasRenderer. + * @param {CanvasRenderer|WebGLRenderer} renderer - a renderer instance + */ + preDraw(renderer) { + super.preDraw(renderer); + renderer.setBlendMode(this.blendMode); + } + /** * draw this Light2d (automatically called by melonJS) * @param {CanvasRenderer|WebGLRenderer} renderer - a renderer instance diff --git a/packages/melonjs/src/video/webgl/compositors/quad_compositor.js b/packages/melonjs/src/video/webgl/compositors/quad_compositor.js index 438c2e55d0..2bc98c4eab 100644 --- a/packages/melonjs/src/video/webgl/compositors/quad_compositor.js +++ b/packages/melonjs/src/video/webgl/compositors/quad_compositor.js @@ -100,6 +100,7 @@ export default class QuadCompositor extends Compositor { h = pixels.height, premultipliedAlpha = true, mipmap = true, + texture, ) { const gl = this.gl; const isPOT = isPowerOfTwo(w) && isPowerOfTwo(h); @@ -114,9 +115,12 @@ export default class QuadCompositor extends Compositor { ? gl.REPEAT : gl.CLAMP_TO_EDGE; - const texture = gl.createTexture(); + let currentTexture = texture; + if (!currentTexture) { + currentTexture = gl.createTexture(); + } - this.bindTexture2D(texture, unit); + this.bindTexture2D(currentTexture, unit); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, rs); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, rt); @@ -170,7 +174,7 @@ export default class QuadCompositor extends Compositor { gl.generateMipmap(gl.TEXTURE_2D); } - return texture; + return currentTexture; } /** @@ -250,6 +254,8 @@ export default class QuadCompositor extends Compositor { w, h, texture.premultipliedAlpha, + undefined, + texture2D, ); } else { this.bindTexture2D(texture2D, unit);