Skip to content

Commit ef942fb

Browse files
committed
Premultiplied Alpha blending
1 parent 0993af6 commit ef942fb

14 files changed

Lines changed: 27 additions & 17 deletions

v3/src/gameobjects/components/TransformMatrix.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ var TransformMatrix = new Class({
6868
return this.transform(radianCos, radianSin, -radianSin, radianCos, 0, 0);
6969
},
7070

71-
multiply: function (lhs)
71+
multiply: function (rhs)
7272
{
7373
var matrix = this.matrix;
74-
var otherMatrix = lhs.matrix;
74+
var otherMatrix = rhs.matrix;
7575

7676
var a0 = matrix[0];
7777
var b0 = matrix[1];

v3/src/renderer/webgl/WebGLRenderer.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ var WebGLRenderer = new Class({
8080
preserveDrawingBuffer: false,
8181

8282
WebGLContextOptions: {
83-
alpha: true,
83+
alpha: false,
8484
antialias: true,
85-
premultipliedAlpha: true,
85+
premultipliedAlpha: false,
8686
stencil: true,
8787
preserveDrawingBuffer: false
8888
}
@@ -142,14 +142,15 @@ var WebGLRenderer = new Class({
142142
gl.disable(gl.CULL_FACE);
143143
gl.enable(gl.BLEND);
144144
gl.clearColor(color.redGL, color.greenGL, color.blueGL, color.alphaGL);
145+
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
145146

146147
// Map Blend Modes
147148

148149
this.blendModes = [];
149150

150151
for (var i = 0; i <= 16; i++)
151152
{
152-
this.blendModes.push({ func: [ gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ], equation: gl.FUNC_ADD });
153+
this.blendModes.push({ func: [ gl.ONE, gl.ONE_MINUS_SRC_ALPHA ], equation: gl.FUNC_ADD });
153154
}
154155

155156
// Add

v3/src/renderer/webgl/shaders/GBufferShader.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ var GBufferShader = function ()
1717
' vec4 spriteColor = texture2D(uMainTexture, v_tex_coord) * vec4(v_color, v_alpha);',
1818
' vec3 spriteNormal = texture2D(uNormTexture, v_tex_coord).rgb;',
1919

20-
' gl_FragData[0] = spriteColor;',
20+
' gl_FragData[0] = vec4(spriteColor.rgb * spriteColor.a, spriteColor.a);',
2121
' gl_FragData[1] = vec4(spriteNormal, spriteColor.a);',
2222
'}'
2323
];

v3/src/renderer/webgl/shaders/LightFragmentShader.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ var LightFragmentShader = function (maxLights)
4343
' finalColor += attenuation * diffuse;',
4444
' }',
4545

46-
' gl_FragColor = vec4(uAmbientLightColor + finalColor, spriteColor.a);',
46+
' vec4 color_output = vec4(uAmbientLightColor + finalColor, spriteColor.a);',
47+
' gl_FragColor = vec4(color_output.rgb * color_output.a, color_output.a);',
4748
'}'
4849
];
4950

v3/src/renderer/webgl/shaders/MaskShader.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ module.exports = {
1818
' vec2 uv = gl_FragCoord.xy / u_resolution;',
1919
' vec4 main_color = texture2D(u_main_sampler, uv);',
2020
' vec4 mask_color = texture2D(u_mask_sampler, uv);',
21+
' float alpha = mask_color.a * main_color.a;',
2122
' // Just mask using alpha channel',
22-
' gl_FragColor = vec4(main_color.rgb, mask_color.a * main_color.a);',
23+
' gl_FragColor = vec4(main_color.rgb * alpha, alpha);',
2324
'}'
2425
].join('\n')
2526
};

v3/src/renderer/webgl/shaders/ParticleShader.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ var ParticleShader = function ()
3030

3131
'void main()',
3232
'{',
33-
' gl_FragColor = texture2D(u_main_sampler, v_tex_coord) * v_color;',
33+
' vec4 sample_color = texture2D(u_main_sampler, v_tex_coord) * v_color;',
34+
' gl_FragColor = vec4(sample_color.rgb * sample_color.a, sample_color.a);',
3435
'}'
3536
];
3637

v3/src/renderer/webgl/shaders/Phong2DShaderDeferred.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ var Phong2DShaderDeferred = function (maxLights)
4949
' finalColor += attenuation * diffuse;',
5050
' }',
5151

52-
' gl_FragColor = vec4(uAmbientLightColor + finalColor, gbColor.a);',
52+
' vec4 color_output = vec4(uAmbientLightColor + finalColor, gbColor.a);',
53+
' gl_FragColor = vec4(color_output.rgb * color_output.a, color_output.a);',
5354
'}'
5455
];
5556

v3/src/renderer/webgl/shaders/TexturedAndAlphaShader.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ module.exports = {
1818
'varying vec2 v_tex_coord;',
1919
'varying float v_alpha;',
2020
'void main() {',
21-
' gl_FragColor = texture2D(u_sampler2D, v_tex_coord) * vec4(1.0, 1.0, 1.0, v_alpha);',
21+
' vec4 output_color = texture2D(u_sampler2D, v_tex_coord);',
22+
' gl_FragColor = vec4(output_color.rgb * output_color.a, v_alpha * output_color.a);',
2223
'}'
2324
].join('\n')
2425
};

v3/src/renderer/webgl/shaders/TexturedAndNormalizedTintedShader.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ module.exports = {
2222
'varying vec3 v_color;',
2323
'varying float v_alpha;',
2424
'void main() {',
25-
' gl_FragColor = texture2D(u_sampler2D, v_tex_coord) * vec4(v_color, v_alpha);',
25+
' vec4 sample_color = texture2D(u_sampler2D, v_tex_coord);',
26+
' gl_FragColor = vec4((sample_color.rgb * v_color.rgb) * sample_color.a, sample_color.a * v_alpha);',
2627
'}'
2728
].join('\n')
2829
};

v3/src/renderer/webgl/shaders/TexturedShader.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ module.exports = {
1414
'uniform sampler2D u_sampler;',
1515
'varying vec2 v_tex_coord;',
1616
'void main(void) {',
17-
' gl_FragColor = texture2D(u_sampler, v_tex_coord);',
17+
' vec4 output_color = texture2D(u_sampler, v_tex_coord);',
18+
' gl_FragColor = vec4(output_color.rgb * output_color.a, output_color.a);',
1819
'}'
1920
].join('\n')
2021
};

0 commit comments

Comments
 (0)