From 6b267a7367789ffa970c40988c638ffc8ade2c4f Mon Sep 17 00:00:00 2001 From: Tarek Sherif Date: Tue, 15 Mar 2016 18:54:24 -0400 Subject: [PATCH] Alpha premultiplied in FS for proper compositing. --- src/core/display/chunks/flagsChunk.js | 2 +- src/core/display/chunks/regionMapChunk.js | 2 +- src/core/display/chunks/renderTargetChunk.js | 2 +- src/core/display/programSourceFactory.js | 4 ++++ 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/core/display/chunks/flagsChunk.js b/src/core/display/chunks/flagsChunk.js index 0f32565c..924828a6 100644 --- a/src/core/display/chunks/flagsChunk.js +++ b/src/core/display/chunks/flagsChunk.js @@ -63,7 +63,7 @@ SceneJS_ChunkFactory.createChunkType({ // Entering a transparency bin gl.enable(gl.BLEND); - gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); frameCtx.blendEnabled = true; } else { diff --git a/src/core/display/chunks/regionMapChunk.js b/src/core/display/chunks/regionMapChunk.js index 750bbf15..bf19ae8e 100644 --- a/src/core/display/chunks/regionMapChunk.js +++ b/src/core/display/chunks/regionMapChunk.js @@ -30,7 +30,7 @@ SceneJS_ChunkFactory.createChunkType({ // Entering a transparency bin gl.enable(gl.BLEND); - gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); frameCtx.blendEnabled = true; } else { diff --git a/src/core/display/chunks/renderTargetChunk.js b/src/core/display/chunks/renderTargetChunk.js index f940c03e..4f146c48 100644 --- a/src/core/display/chunks/renderTargetChunk.js +++ b/src/core/display/chunks/renderTargetChunk.js @@ -36,7 +36,7 @@ SceneJS_ChunkFactory.createChunkType({ // Enable blending for non-depth targets if (frameCtx.blendEnabled) { gl.enable(gl.BLEND); - gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); } } diff --git a/src/core/display/programSourceFactory.js b/src/core/display/programSourceFactory.js index e0e9c679..a4f79e33 100644 --- a/src/core/display/programSourceFactory.js +++ b/src/core/display/programSourceFactory.js @@ -1304,6 +1304,10 @@ var SceneJS_ProgramSourceFactory = new (function () { add("fragColor.rgb *= mix(SCENEJS_uFragmentFresnelEdgeColor.rgb, SCENEJS_uFragmentFresnelCenterColor.rgb, fragmentFresnel);"); } + if (!depthTargeting) { + add("fragColor.rgb *= fragColor.a;"); + } + add("gl_FragColor = fragColor;"); add("}");