From d5326a98236e5eb995f350a5ae2ffbc46a4a7d0e Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 13 Sep 2023 19:43:45 +0200 Subject: [PATCH] Revert "split webgl blendmodes into separate destination color/alpha values (#2347)" This reverts commit 07c05431bf8754415736052046123a97ab475d2c. # Conflicts: # spine-ts/spine-webgl/src/SkeletonRenderer.ts --- spine-ts/spine-webgl/src/LoadingScreen.ts | 2 +- spine-ts/spine-webgl/src/PolygonBatcher.ts | 17 ++++---- spine-ts/spine-webgl/src/ShapeRenderer.ts | 15 +++---- .../spine-webgl/src/SkeletonDebugRenderer.ts | 2 +- spine-ts/spine-webgl/src/SkeletonRenderer.ts | 5 +-- spine-ts/spine-webgl/src/WebGL.ts | 41 +++++-------------- 6 files changed, 27 insertions(+), 55 deletions(-) diff --git a/spine-ts/spine-webgl/src/LoadingScreen.ts b/spine-ts/spine-webgl/src/LoadingScreen.ts index 19c3eb1f5..4e74a8bec 100644 --- a/spine-ts/spine-webgl/src/LoadingScreen.ts +++ b/spine-ts/spine-webgl/src/LoadingScreen.ts @@ -88,7 +88,7 @@ export class LoadingScreen implements Disposable { renderer.resize(ResizeMode.Expand); renderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0); - renderer.batcher.setBlendMode(gl.ONE, gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + renderer.batcher.setBlendMode(gl.ONE, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); if (complete) { this.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1); diff --git a/spine-ts/spine-webgl/src/PolygonBatcher.ts b/spine-ts/spine-webgl/src/PolygonBatcher.ts index 3ce608348..418c0a5b2 100644 --- a/spine-ts/spine-webgl/src/PolygonBatcher.ts +++ b/spine-ts/spine-webgl/src/PolygonBatcher.ts @@ -47,8 +47,7 @@ export class PolygonBatcher implements Disposable { private indicesLength = 0; private srcColorBlend: number; private srcAlphaBlend: number; - private dstColorBlend: number; - private dstAlphaBlend: number; + private dstBlend: number; private cullWasEnabled = false; constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint: boolean = true, maxVertices: number = 10920) { @@ -61,8 +60,7 @@ export class PolygonBatcher implements Disposable { let gl = this.context.gl; this.srcColorBlend = gl.SRC_ALPHA; this.srcAlphaBlend = gl.ONE; - this.dstColorBlend = gl.ONE_MINUS_SRC_ALPHA; - this.dstAlphaBlend = gl.ONE_MINUS_SRC_ALPHA; + this.dstBlend = gl.ONE_MINUS_SRC_ALPHA; } begin (shader: Shader) { @@ -74,7 +72,7 @@ export class PolygonBatcher implements Disposable { let gl = this.context.gl; gl.enable(gl.BLEND); - gl.blendFuncSeparate(this.srcColorBlend, this.dstColorBlend, this.srcAlphaBlend, this.dstAlphaBlend); + gl.blendFuncSeparate(this.srcColorBlend, this.dstBlend, this.srcAlphaBlend, this.dstBlend); if (PolygonBatcher.disableCulling) { this.cullWasEnabled = gl.isEnabled(gl.CULL_FACE); @@ -82,16 +80,15 @@ export class PolygonBatcher implements Disposable { } } - setBlendMode (srcColorBlend: number, srcAlphaBlend: number, dstColorBlend: number, dstAlphaBlend: number) { - if (this.srcColorBlend == srcColorBlend && this.srcAlphaBlend == srcAlphaBlend && this.dstColorBlend == dstColorBlend && this.dstAlphaBlend == dstAlphaBlend) return; + setBlendMode (srcColorBlend: number, srcAlphaBlend: number, dstBlend: number) { + if (this.srcColorBlend == srcColorBlend && this.srcAlphaBlend == srcAlphaBlend && this.dstBlend == dstBlend) return; this.srcColorBlend = srcColorBlend; this.srcAlphaBlend = srcAlphaBlend; - this.dstColorBlend = dstColorBlend; - this.dstAlphaBlend = dstAlphaBlend; + this.dstBlend = dstBlend; if (this.isDrawing) { this.flush(); let gl = this.context.gl; - gl.blendFuncSeparate(srcColorBlend, dstColorBlend, srcAlphaBlend, dstAlphaBlend); + gl.blendFuncSeparate(srcColorBlend, dstBlend, srcAlphaBlend, dstBlend); } } diff --git a/spine-ts/spine-webgl/src/ShapeRenderer.ts b/spine-ts/spine-webgl/src/ShapeRenderer.ts index 240e86320..1bb7c066e 100644 --- a/spine-ts/spine-webgl/src/ShapeRenderer.ts +++ b/spine-ts/spine-webgl/src/ShapeRenderer.ts @@ -43,8 +43,7 @@ export class ShapeRenderer implements Disposable { private tmp = new Vector2(); private srcColorBlend: number; private srcAlphaBlend: number; - private dstColorBlend: number; - private dstAlphaBlend: number; + private dstBlend: number; constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, maxVertices: number = 10920) { if (maxVertices > 10920) throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); @@ -53,8 +52,7 @@ export class ShapeRenderer implements Disposable { let gl = this.context.gl; this.srcColorBlend = gl.SRC_ALPHA; this.srcAlphaBlend = gl.ONE; - this.dstColorBlend = gl.ONE_MINUS_SRC_ALPHA; - this.dstAlphaBlend = gl.ONE_MINUS_SRC_ALPHA; + this.dstBlend = gl.ONE_MINUS_SRC_ALPHA; } begin (shader: Shader) { @@ -65,18 +63,17 @@ export class ShapeRenderer implements Disposable { let gl = this.context.gl; gl.enable(gl.BLEND); - gl.blendFuncSeparate(this.srcColorBlend, this.dstColorBlend, this.srcAlphaBlend, this.dstAlphaBlend); + gl.blendFuncSeparate(this.srcColorBlend, this.dstBlend, this.srcAlphaBlend, this.dstBlend); } - setBlendMode (srcColorBlend: number, srcAlphaBlend: number, dstColorBlend: number, dstAlphaBlend: number) { + setBlendMode (srcColorBlend: number, srcAlphaBlend: number, dstBlend: number) { this.srcColorBlend = srcColorBlend; this.srcAlphaBlend = srcAlphaBlend; - this.dstColorBlend = dstColorBlend; - this.dstAlphaBlend = dstAlphaBlend; + this.dstBlend = dstBlend; if (this.isDrawing) { this.flush(); let gl = this.context.gl; - gl.blendFuncSeparate(srcColorBlend, dstColorBlend, srcAlphaBlend, dstAlphaBlend); + gl.blendFuncSeparate(srcColorBlend, dstBlend, srcAlphaBlend, dstBlend); } } diff --git a/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts b/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts index 7273b6d2b..ed71b5c7a 100644 --- a/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts +++ b/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts @@ -67,7 +67,7 @@ export class SkeletonDebugRenderer implements Disposable { let skeletonY = skeleton.y; let gl = this.context.gl; let srcFunc = this.premultipliedAlpha ? gl.ONE : gl.SRC_ALPHA; - shapes.setBlendMode(srcFunc, gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + shapes.setBlendMode(srcFunc, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); let bones = skeleton.bones; if (this.drawBones) { diff --git a/spine-ts/spine-webgl/src/SkeletonRenderer.ts b/spine-ts/spine-webgl/src/SkeletonRenderer.ts index 9c77897be..73b4fc09c 100644 --- a/spine-ts/spine-webgl/src/SkeletonRenderer.ts +++ b/spine-ts/spine-webgl/src/SkeletonRenderer.ts @@ -168,9 +168,8 @@ export class SkeletonRenderer { blendMode = slotBlendMode; batcher.setBlendMode( WebGLBlendModeConverter.getSourceColorGLBlendMode(blendMode, premultipliedAlpha), - WebGLBlendModeConverter.getSourceAlphaGLBlendMode(blendMode, premultipliedAlpha), - WebGLBlendModeConverter.getDestColorGLBlendMode(blendMode), - WebGLBlendModeConverter.getDestAlphaGLBlendMode(blendMode, premultipliedAlpha)); + WebGLBlendModeConverter.getSourceAlphaGLBlendMode(blendMode), + WebGLBlendModeConverter.getDestGLBlendMode(blendMode)); } if (clipper.isClipping()) { diff --git a/spine-ts/spine-webgl/src/WebGL.ts b/spine-ts/spine-webgl/src/WebGL.ts index ad7326808..5f21980ec 100644 --- a/spine-ts/spine-webgl/src/WebGL.ts +++ b/spine-ts/spine-webgl/src/WebGL.ts @@ -71,7 +71,6 @@ const ONE_MINUS_DST_ALPHA = 0x0305; const DST_COLOR = 0x0306; export class WebGLBlendModeConverter { - static getDestGLBlendMode (blendMode: BlendMode) { switch (blendMode) { case BlendMode.Normal: return ONE_MINUS_SRC_ALPHA; @@ -82,43 +81,23 @@ export class WebGLBlendModeConverter { } } - static getDestColorGLBlendMode (blendMode: BlendMode) { - switch (blendMode) { - case BlendMode.Normal: return ONE_MINUS_SRC_ALPHA; - case BlendMode.Additive: return ONE; - case BlendMode.Multiply: return ONE_MINUS_SRC_ALPHA; - case BlendMode.Screen: return ONE_MINUS_SRC_COLOR; - default: throw new Error("Unknown blend mode: " + blendMode); - } - } - - static getDestAlphaGLBlendMode (blendMode: BlendMode, premultipliedAlpha: boolean = false) { - switch (blendMode) { - case BlendMode.Normal: return ONE_MINUS_SRC_ALPHA; - case BlendMode.Additive: return premultipliedAlpha ? ONE_MINUS_SRC_ALPHA : ONE; - case BlendMode.Multiply: return ONE_MINUS_SRC_ALPHA; - case BlendMode.Screen: return ONE_MINUS_SRC_ALPHA; - default: throw new Error("Unknown blend mode: " + blendMode); - } - } - static getSourceColorGLBlendMode (blendMode: BlendMode, premultipliedAlpha: boolean = false) { switch (blendMode) { case BlendMode.Normal: return premultipliedAlpha ? ONE : SRC_ALPHA; case BlendMode.Additive: return premultipliedAlpha ? ONE : SRC_ALPHA; case BlendMode.Multiply: return DST_COLOR; - case BlendMode.Screen: return premultipliedAlpha ? ONE : SRC_ALPHA; - default: throw new Error("Unknown blend mode: " + blendMode); - } - } - - static getSourceAlphaGLBlendMode (blendMode: BlendMode, premultipliedAlpha: boolean = false) { - switch (blendMode) { - case BlendMode.Normal: return premultipliedAlpha ? SRC_ALPHA : ONE; - case BlendMode.Additive: return premultipliedAlpha ? SRC_ALPHA : ONE; - case BlendMode.Multiply: return ONE; case BlendMode.Screen: return ONE; default: throw new Error("Unknown blend mode: " + blendMode); } } + + static getSourceAlphaGLBlendMode (blendMode: BlendMode) { + switch (blendMode) { + case BlendMode.Normal: return ONE; + case BlendMode.Additive: return ONE; + case BlendMode.Multiply: return ONE_MINUS_SRC_ALPHA; + case BlendMode.Screen: return ONE_MINUS_SRC_COLOR; + default: throw new Error("Unknown blend mode: " + blendMode); + } + } }