mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-02 05:39:07 +08:00
Revert "split webgl blendmodes into separate destination color/alpha values (#2347)"
This reverts commit 07c05431bf8754415736052046123a97ab475d2c. # Conflicts: # spine-ts/spine-webgl/src/SkeletonRenderer.ts
This commit is contained in:
parent
9eab06f3ba
commit
d5326a9823
@ -88,7 +88,7 @@ export class LoadingScreen implements Disposable {
|
|||||||
|
|
||||||
renderer.resize(ResizeMode.Expand);
|
renderer.resize(ResizeMode.Expand);
|
||||||
renderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0);
|
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) {
|
if (complete) {
|
||||||
this.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1);
|
this.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1);
|
||||||
|
|||||||
@ -47,8 +47,7 @@ export class PolygonBatcher implements Disposable {
|
|||||||
private indicesLength = 0;
|
private indicesLength = 0;
|
||||||
private srcColorBlend: number;
|
private srcColorBlend: number;
|
||||||
private srcAlphaBlend: number;
|
private srcAlphaBlend: number;
|
||||||
private dstColorBlend: number;
|
private dstBlend: number;
|
||||||
private dstAlphaBlend: number;
|
|
||||||
private cullWasEnabled = false;
|
private cullWasEnabled = false;
|
||||||
|
|
||||||
constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint: boolean = true, maxVertices: number = 10920) {
|
constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint: boolean = true, maxVertices: number = 10920) {
|
||||||
@ -61,8 +60,7 @@ export class PolygonBatcher implements Disposable {
|
|||||||
let gl = this.context.gl;
|
let gl = this.context.gl;
|
||||||
this.srcColorBlend = gl.SRC_ALPHA;
|
this.srcColorBlend = gl.SRC_ALPHA;
|
||||||
this.srcAlphaBlend = gl.ONE;
|
this.srcAlphaBlend = gl.ONE;
|
||||||
this.dstColorBlend = gl.ONE_MINUS_SRC_ALPHA;
|
this.dstBlend = gl.ONE_MINUS_SRC_ALPHA;
|
||||||
this.dstAlphaBlend = gl.ONE_MINUS_SRC_ALPHA;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
begin (shader: Shader) {
|
begin (shader: Shader) {
|
||||||
@ -74,7 +72,7 @@ export class PolygonBatcher implements Disposable {
|
|||||||
|
|
||||||
let gl = this.context.gl;
|
let gl = this.context.gl;
|
||||||
gl.enable(gl.BLEND);
|
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) {
|
if (PolygonBatcher.disableCulling) {
|
||||||
this.cullWasEnabled = gl.isEnabled(gl.CULL_FACE);
|
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) {
|
setBlendMode (srcColorBlend: number, srcAlphaBlend: number, dstBlend: number) {
|
||||||
if (this.srcColorBlend == srcColorBlend && this.srcAlphaBlend == srcAlphaBlend && this.dstColorBlend == dstColorBlend && this.dstAlphaBlend == dstAlphaBlend) return;
|
if (this.srcColorBlend == srcColorBlend && this.srcAlphaBlend == srcAlphaBlend && this.dstBlend == dstBlend) return;
|
||||||
this.srcColorBlend = srcColorBlend;
|
this.srcColorBlend = srcColorBlend;
|
||||||
this.srcAlphaBlend = srcAlphaBlend;
|
this.srcAlphaBlend = srcAlphaBlend;
|
||||||
this.dstColorBlend = dstColorBlend;
|
this.dstBlend = dstBlend;
|
||||||
this.dstAlphaBlend = dstAlphaBlend;
|
|
||||||
if (this.isDrawing) {
|
if (this.isDrawing) {
|
||||||
this.flush();
|
this.flush();
|
||||||
let gl = this.context.gl;
|
let gl = this.context.gl;
|
||||||
gl.blendFuncSeparate(srcColorBlend, dstColorBlend, srcAlphaBlend, dstAlphaBlend);
|
gl.blendFuncSeparate(srcColorBlend, dstBlend, srcAlphaBlend, dstBlend);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -43,8 +43,7 @@ export class ShapeRenderer implements Disposable {
|
|||||||
private tmp = new Vector2();
|
private tmp = new Vector2();
|
||||||
private srcColorBlend: number;
|
private srcColorBlend: number;
|
||||||
private srcAlphaBlend: number;
|
private srcAlphaBlend: number;
|
||||||
private dstColorBlend: number;
|
private dstBlend: number;
|
||||||
private dstAlphaBlend: number;
|
|
||||||
|
|
||||||
constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, maxVertices: number = 10920) {
|
constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, maxVertices: number = 10920) {
|
||||||
if (maxVertices > 10920) throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices);
|
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;
|
let gl = this.context.gl;
|
||||||
this.srcColorBlend = gl.SRC_ALPHA;
|
this.srcColorBlend = gl.SRC_ALPHA;
|
||||||
this.srcAlphaBlend = gl.ONE;
|
this.srcAlphaBlend = gl.ONE;
|
||||||
this.dstColorBlend = gl.ONE_MINUS_SRC_ALPHA;
|
this.dstBlend = gl.ONE_MINUS_SRC_ALPHA;
|
||||||
this.dstAlphaBlend = gl.ONE_MINUS_SRC_ALPHA;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
begin (shader: Shader) {
|
begin (shader: Shader) {
|
||||||
@ -65,18 +63,17 @@ export class ShapeRenderer implements Disposable {
|
|||||||
|
|
||||||
let gl = this.context.gl;
|
let gl = this.context.gl;
|
||||||
gl.enable(gl.BLEND);
|
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.srcColorBlend = srcColorBlend;
|
||||||
this.srcAlphaBlend = srcAlphaBlend;
|
this.srcAlphaBlend = srcAlphaBlend;
|
||||||
this.dstColorBlend = dstColorBlend;
|
this.dstBlend = dstBlend;
|
||||||
this.dstAlphaBlend = dstAlphaBlend;
|
|
||||||
if (this.isDrawing) {
|
if (this.isDrawing) {
|
||||||
this.flush();
|
this.flush();
|
||||||
let gl = this.context.gl;
|
let gl = this.context.gl;
|
||||||
gl.blendFuncSeparate(srcColorBlend, dstColorBlend, srcAlphaBlend, dstAlphaBlend);
|
gl.blendFuncSeparate(srcColorBlend, dstBlend, srcAlphaBlend, dstBlend);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -67,7 +67,7 @@ export class SkeletonDebugRenderer implements Disposable {
|
|||||||
let skeletonY = skeleton.y;
|
let skeletonY = skeleton.y;
|
||||||
let gl = this.context.gl;
|
let gl = this.context.gl;
|
||||||
let srcFunc = this.premultipliedAlpha ? gl.ONE : gl.SRC_ALPHA;
|
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;
|
let bones = skeleton.bones;
|
||||||
if (this.drawBones) {
|
if (this.drawBones) {
|
||||||
|
|||||||
@ -168,9 +168,8 @@ export class SkeletonRenderer {
|
|||||||
blendMode = slotBlendMode;
|
blendMode = slotBlendMode;
|
||||||
batcher.setBlendMode(
|
batcher.setBlendMode(
|
||||||
WebGLBlendModeConverter.getSourceColorGLBlendMode(blendMode, premultipliedAlpha),
|
WebGLBlendModeConverter.getSourceColorGLBlendMode(blendMode, premultipliedAlpha),
|
||||||
WebGLBlendModeConverter.getSourceAlphaGLBlendMode(blendMode, premultipliedAlpha),
|
WebGLBlendModeConverter.getSourceAlphaGLBlendMode(blendMode),
|
||||||
WebGLBlendModeConverter.getDestColorGLBlendMode(blendMode),
|
WebGLBlendModeConverter.getDestGLBlendMode(blendMode));
|
||||||
WebGLBlendModeConverter.getDestAlphaGLBlendMode(blendMode, premultipliedAlpha));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clipper.isClipping()) {
|
if (clipper.isClipping()) {
|
||||||
|
|||||||
@ -71,7 +71,6 @@ const ONE_MINUS_DST_ALPHA = 0x0305;
|
|||||||
const DST_COLOR = 0x0306;
|
const DST_COLOR = 0x0306;
|
||||||
|
|
||||||
export class WebGLBlendModeConverter {
|
export class WebGLBlendModeConverter {
|
||||||
|
|
||||||
static getDestGLBlendMode (blendMode: BlendMode) {
|
static getDestGLBlendMode (blendMode: BlendMode) {
|
||||||
switch (blendMode) {
|
switch (blendMode) {
|
||||||
case BlendMode.Normal: return ONE_MINUS_SRC_ALPHA;
|
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) {
|
static getSourceColorGLBlendMode (blendMode: BlendMode, premultipliedAlpha: boolean = false) {
|
||||||
switch (blendMode) {
|
switch (blendMode) {
|
||||||
case BlendMode.Normal: return premultipliedAlpha ? ONE : SRC_ALPHA;
|
case BlendMode.Normal: return premultipliedAlpha ? ONE : SRC_ALPHA;
|
||||||
case BlendMode.Additive: return premultipliedAlpha ? ONE : SRC_ALPHA;
|
case BlendMode.Additive: return premultipliedAlpha ? ONE : SRC_ALPHA;
|
||||||
case BlendMode.Multiply: return DST_COLOR;
|
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;
|
case BlendMode.Screen: return ONE;
|
||||||
default: throw new Error("Unknown blend mode: " + blendMode);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user