mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
Merge branch '3.6' into 3.7-beta
This commit is contained in:
commit
ba90852ad6
@ -249,6 +249,7 @@
|
|||||||
* Added two color tinting support, enabled by default. You can disable it via the constructors of `SceneRenderer`, `SkeletonRenderer`and `PolygonBatcher`. Note that you will need to use a shader created via `Shader.newTwoColoredTexturedShader` shader with `SkeletonRenderer` and `PolygonBatcher` if two color tinting is enabled.
|
* Added two color tinting support, enabled by default. You can disable it via the constructors of `SceneRenderer`, `SkeletonRenderer`and `PolygonBatcher`. Note that you will need to use a shader created via `Shader.newTwoColoredTexturedShader` shader with `SkeletonRenderer` and `PolygonBatcher` if two color tinting is enabled.
|
||||||
* Added clipping support
|
* Added clipping support
|
||||||
* Added `VertexEffect` interface, instances of which can be set on `SkeletonRenderer`. Allows to modify vertices before submitting them to GPU. See `SwirlEffect`, `JitterEffect`, and the example which allows to set effects.
|
* Added `VertexEffect` interface, instances of which can be set on `SkeletonRenderer`. Allows to modify vertices before submitting them to GPU. See `SwirlEffect`, `JitterEffect`, and the example which allows to set effects.
|
||||||
|
* Added `slotRangeStart` and `slotRangeEnd` parameters to `SkeletonRenderer#draw` and `SceneRenderer#drawSkeleton`. This allows you to render only a range of slots in the draw order. See `spine-ts/webgl/tests/test-slot-range.html` for an example.
|
||||||
|
|
||||||
### Canvas backend
|
### Canvas backend
|
||||||
* Fixed renderer to work for 3.6 changes. Sadly, we can't support two color tinting via the Canvas API.
|
* Fixed renderer to work for 3.6 changes. Sadly, we can't support two color tinting via the Canvas API.
|
||||||
|
|||||||
4
spine-ts/build/spine-all.d.ts
vendored
4
spine-ts/build/spine-all.d.ts
vendored
@ -1492,7 +1492,7 @@ declare module spine.webgl {
|
|||||||
private WHITE;
|
private WHITE;
|
||||||
constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean);
|
constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean);
|
||||||
begin(): void;
|
begin(): void;
|
||||||
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
|
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean, slotRangeStart?: number, slotRangeEnd?: number): void;
|
||||||
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
||||||
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
||||||
drawTextureUV(texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: number, color?: Color): void;
|
drawTextureUV(texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: number, color?: Color): void;
|
||||||
@ -1651,7 +1651,7 @@ declare module spine.webgl {
|
|||||||
private temp3;
|
private temp3;
|
||||||
private temp4;
|
private temp4;
|
||||||
constructor(context: ManagedWebGLRenderingContext, twoColorTint?: boolean);
|
constructor(context: ManagedWebGLRenderingContext, twoColorTint?: boolean);
|
||||||
draw(batcher: PolygonBatcher, skeleton: Skeleton): void;
|
draw(batcher: PolygonBatcher, skeleton: Skeleton, slotRangeStart?: number, slotRangeEnd?: number): void;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
declare module spine.webgl {
|
declare module spine.webgl {
|
||||||
|
|||||||
@ -8004,11 +8004,13 @@ var spine;
|
|||||||
this.camera.update();
|
this.camera.update();
|
||||||
this.enableRenderer(this.batcher);
|
this.enableRenderer(this.batcher);
|
||||||
};
|
};
|
||||||
SceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha) {
|
SceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha, slotRangeStart, slotRangeEnd) {
|
||||||
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
||||||
|
if (slotRangeStart === void 0) { slotRangeStart = -1; }
|
||||||
|
if (slotRangeEnd === void 0) { slotRangeEnd = -1; }
|
||||||
this.enableRenderer(this.batcher);
|
this.enableRenderer(this.batcher);
|
||||||
this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;
|
this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;
|
||||||
this.skeletonRenderer.draw(this.batcher, skeleton);
|
this.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd);
|
||||||
};
|
};
|
||||||
SceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) {
|
SceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) {
|
||||||
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
||||||
@ -9157,7 +9159,9 @@ var spine;
|
|||||||
this.vertexSize += 4;
|
this.vertexSize += 4;
|
||||||
this.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024);
|
this.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024);
|
||||||
}
|
}
|
||||||
SkeletonRenderer.prototype.draw = function (batcher, skeleton) {
|
SkeletonRenderer.prototype.draw = function (batcher, skeleton, slotRangeStart, slotRangeEnd) {
|
||||||
|
if (slotRangeStart === void 0) { slotRangeStart = -1; }
|
||||||
|
if (slotRangeEnd === void 0) { slotRangeEnd = -1; }
|
||||||
var clipper = this.clipper;
|
var clipper = this.clipper;
|
||||||
var premultipliedAlpha = this.premultipliedAlpha;
|
var premultipliedAlpha = this.premultipliedAlpha;
|
||||||
var twoColorTint = this.twoColorTint;
|
var twoColorTint = this.twoColorTint;
|
||||||
@ -9173,9 +9177,22 @@ var spine;
|
|||||||
var attachmentColor = null;
|
var attachmentColor = null;
|
||||||
var skeletonColor = skeleton.color;
|
var skeletonColor = skeleton.color;
|
||||||
var vertexSize = twoColorTint ? 12 : 8;
|
var vertexSize = twoColorTint ? 12 : 8;
|
||||||
|
var inRange = false;
|
||||||
|
if (slotRangeStart == -1)
|
||||||
|
inRange = true;
|
||||||
for (var i = 0, n = drawOrder.length; i < n; i++) {
|
for (var i = 0, n = drawOrder.length; i < n; i++) {
|
||||||
var clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;
|
var clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;
|
||||||
var slot = drawOrder[i];
|
var slot = drawOrder[i];
|
||||||
|
if (slotRangeStart >= 0 && slotRangeStart == slot.data.index) {
|
||||||
|
inRange = true;
|
||||||
|
}
|
||||||
|
if (!inRange) {
|
||||||
|
clipper.clipEndWithSlot(slot);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) {
|
||||||
|
inRange = false;
|
||||||
|
}
|
||||||
var attachment = slot.getAttachment();
|
var attachment = slot.getAttachment();
|
||||||
var texture = null;
|
var texture = null;
|
||||||
if (attachment instanceof spine.RegionAttachment) {
|
if (attachment instanceof spine.RegionAttachment) {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
spine-ts/build/spine-webgl.d.ts
vendored
4
spine-ts/build/spine-webgl.d.ts
vendored
@ -1461,7 +1461,7 @@ declare module spine.webgl {
|
|||||||
private WHITE;
|
private WHITE;
|
||||||
constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean);
|
constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean);
|
||||||
begin(): void;
|
begin(): void;
|
||||||
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
|
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean, slotRangeStart?: number, slotRangeEnd?: number): void;
|
||||||
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
||||||
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
||||||
drawTextureUV(texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: number, color?: Color): void;
|
drawTextureUV(texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: number, color?: Color): void;
|
||||||
@ -1620,7 +1620,7 @@ declare module spine.webgl {
|
|||||||
private temp3;
|
private temp3;
|
||||||
private temp4;
|
private temp4;
|
||||||
constructor(context: ManagedWebGLRenderingContext, twoColorTint?: boolean);
|
constructor(context: ManagedWebGLRenderingContext, twoColorTint?: boolean);
|
||||||
draw(batcher: PolygonBatcher, skeleton: Skeleton): void;
|
draw(batcher: PolygonBatcher, skeleton: Skeleton, slotRangeStart?: number, slotRangeEnd?: number): void;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
declare module spine.webgl {
|
declare module spine.webgl {
|
||||||
|
|||||||
@ -7749,11 +7749,13 @@ var spine;
|
|||||||
this.camera.update();
|
this.camera.update();
|
||||||
this.enableRenderer(this.batcher);
|
this.enableRenderer(this.batcher);
|
||||||
};
|
};
|
||||||
SceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha) {
|
SceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha, slotRangeStart, slotRangeEnd) {
|
||||||
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
||||||
|
if (slotRangeStart === void 0) { slotRangeStart = -1; }
|
||||||
|
if (slotRangeEnd === void 0) { slotRangeEnd = -1; }
|
||||||
this.enableRenderer(this.batcher);
|
this.enableRenderer(this.batcher);
|
||||||
this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;
|
this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;
|
||||||
this.skeletonRenderer.draw(this.batcher, skeleton);
|
this.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd);
|
||||||
};
|
};
|
||||||
SceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) {
|
SceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) {
|
||||||
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
||||||
@ -8902,7 +8904,9 @@ var spine;
|
|||||||
this.vertexSize += 4;
|
this.vertexSize += 4;
|
||||||
this.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024);
|
this.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024);
|
||||||
}
|
}
|
||||||
SkeletonRenderer.prototype.draw = function (batcher, skeleton) {
|
SkeletonRenderer.prototype.draw = function (batcher, skeleton, slotRangeStart, slotRangeEnd) {
|
||||||
|
if (slotRangeStart === void 0) { slotRangeStart = -1; }
|
||||||
|
if (slotRangeEnd === void 0) { slotRangeEnd = -1; }
|
||||||
var clipper = this.clipper;
|
var clipper = this.clipper;
|
||||||
var premultipliedAlpha = this.premultipliedAlpha;
|
var premultipliedAlpha = this.premultipliedAlpha;
|
||||||
var twoColorTint = this.twoColorTint;
|
var twoColorTint = this.twoColorTint;
|
||||||
@ -8918,9 +8922,22 @@ var spine;
|
|||||||
var attachmentColor = null;
|
var attachmentColor = null;
|
||||||
var skeletonColor = skeleton.color;
|
var skeletonColor = skeleton.color;
|
||||||
var vertexSize = twoColorTint ? 12 : 8;
|
var vertexSize = twoColorTint ? 12 : 8;
|
||||||
|
var inRange = false;
|
||||||
|
if (slotRangeStart == -1)
|
||||||
|
inRange = true;
|
||||||
for (var i = 0, n = drawOrder.length; i < n; i++) {
|
for (var i = 0, n = drawOrder.length; i < n; i++) {
|
||||||
var clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;
|
var clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;
|
||||||
var slot = drawOrder[i];
|
var slot = drawOrder[i];
|
||||||
|
if (slotRangeStart >= 0 && slotRangeStart == slot.data.index) {
|
||||||
|
inRange = true;
|
||||||
|
}
|
||||||
|
if (!inRange) {
|
||||||
|
clipper.clipEndWithSlot(slot);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) {
|
||||||
|
inRange = false;
|
||||||
|
}
|
||||||
var attachment = slot.getAttachment();
|
var attachment = slot.getAttachment();
|
||||||
var texture = null;
|
var texture = null;
|
||||||
if (attachment instanceof spine.RegionAttachment) {
|
if (attachment instanceof spine.RegionAttachment) {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
4
spine-ts/build/spine-widget.d.ts
vendored
4
spine-ts/build/spine-widget.d.ts
vendored
@ -1461,7 +1461,7 @@ declare module spine.webgl {
|
|||||||
private WHITE;
|
private WHITE;
|
||||||
constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean);
|
constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean);
|
||||||
begin(): void;
|
begin(): void;
|
||||||
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
|
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean, slotRangeStart?: number, slotRangeEnd?: number): void;
|
||||||
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
||||||
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
||||||
drawTextureUV(texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: number, color?: Color): void;
|
drawTextureUV(texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: number, color?: Color): void;
|
||||||
@ -1620,7 +1620,7 @@ declare module spine.webgl {
|
|||||||
private temp3;
|
private temp3;
|
||||||
private temp4;
|
private temp4;
|
||||||
constructor(context: ManagedWebGLRenderingContext, twoColorTint?: boolean);
|
constructor(context: ManagedWebGLRenderingContext, twoColorTint?: boolean);
|
||||||
draw(batcher: PolygonBatcher, skeleton: Skeleton): void;
|
draw(batcher: PolygonBatcher, skeleton: Skeleton, slotRangeStart?: number, slotRangeEnd?: number): void;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
declare module spine.webgl {
|
declare module spine.webgl {
|
||||||
|
|||||||
@ -7749,11 +7749,13 @@ var spine;
|
|||||||
this.camera.update();
|
this.camera.update();
|
||||||
this.enableRenderer(this.batcher);
|
this.enableRenderer(this.batcher);
|
||||||
};
|
};
|
||||||
SceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha) {
|
SceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha, slotRangeStart, slotRangeEnd) {
|
||||||
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
||||||
|
if (slotRangeStart === void 0) { slotRangeStart = -1; }
|
||||||
|
if (slotRangeEnd === void 0) { slotRangeEnd = -1; }
|
||||||
this.enableRenderer(this.batcher);
|
this.enableRenderer(this.batcher);
|
||||||
this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;
|
this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;
|
||||||
this.skeletonRenderer.draw(this.batcher, skeleton);
|
this.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd);
|
||||||
};
|
};
|
||||||
SceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) {
|
SceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) {
|
||||||
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
|
||||||
@ -8902,7 +8904,9 @@ var spine;
|
|||||||
this.vertexSize += 4;
|
this.vertexSize += 4;
|
||||||
this.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024);
|
this.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024);
|
||||||
}
|
}
|
||||||
SkeletonRenderer.prototype.draw = function (batcher, skeleton) {
|
SkeletonRenderer.prototype.draw = function (batcher, skeleton, slotRangeStart, slotRangeEnd) {
|
||||||
|
if (slotRangeStart === void 0) { slotRangeStart = -1; }
|
||||||
|
if (slotRangeEnd === void 0) { slotRangeEnd = -1; }
|
||||||
var clipper = this.clipper;
|
var clipper = this.clipper;
|
||||||
var premultipliedAlpha = this.premultipliedAlpha;
|
var premultipliedAlpha = this.premultipliedAlpha;
|
||||||
var twoColorTint = this.twoColorTint;
|
var twoColorTint = this.twoColorTint;
|
||||||
@ -8918,9 +8922,22 @@ var spine;
|
|||||||
var attachmentColor = null;
|
var attachmentColor = null;
|
||||||
var skeletonColor = skeleton.color;
|
var skeletonColor = skeleton.color;
|
||||||
var vertexSize = twoColorTint ? 12 : 8;
|
var vertexSize = twoColorTint ? 12 : 8;
|
||||||
|
var inRange = false;
|
||||||
|
if (slotRangeStart == -1)
|
||||||
|
inRange = true;
|
||||||
for (var i = 0, n = drawOrder.length; i < n; i++) {
|
for (var i = 0, n = drawOrder.length; i < n; i++) {
|
||||||
var clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;
|
var clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;
|
||||||
var slot = drawOrder[i];
|
var slot = drawOrder[i];
|
||||||
|
if (slotRangeStart >= 0 && slotRangeStart == slot.data.index) {
|
||||||
|
inRange = true;
|
||||||
|
}
|
||||||
|
if (!inRange) {
|
||||||
|
clipper.clipEndWithSlot(slot);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) {
|
||||||
|
inRange = false;
|
||||||
|
}
|
||||||
var attachment = slot.getAttachment();
|
var attachment = slot.getAttachment();
|
||||||
var texture = null;
|
var texture = null;
|
||||||
if (attachment instanceof spine.RegionAttachment) {
|
if (attachment instanceof spine.RegionAttachment) {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
spineboy.png
|
spineboy-pma.png
|
||||||
size: 1024,512
|
size: 1024,512
|
||||||
format: RGBA8888
|
format: RGBA8888
|
||||||
filter: Linear,Linear
|
filter: Linear,Linear
|
||||||
|
|||||||
@ -68,10 +68,10 @@ module spine.webgl {
|
|||||||
this.enableRenderer(this.batcher);
|
this.enableRenderer(this.batcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
drawSkeleton (skeleton: Skeleton, premultipliedAlpha = false) {
|
drawSkeleton (skeleton: Skeleton, premultipliedAlpha = false, slotRangeStart = -1, slotRangeEnd = -1) {
|
||||||
this.enableRenderer(this.batcher);
|
this.enableRenderer(this.batcher);
|
||||||
this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;
|
this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;
|
||||||
this.skeletonRenderer.draw(this.batcher, skeleton);
|
this.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha = false, ignoredBones: Array<string> = null) {
|
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha = false, ignoredBones: Array<string> = null) {
|
||||||
|
|||||||
@ -57,7 +57,7 @@ module spine.webgl {
|
|||||||
this.vertices = Utils.newFloatArray(this.vertexSize * 1024);
|
this.vertices = Utils.newFloatArray(this.vertexSize * 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
draw (batcher: PolygonBatcher, skeleton: Skeleton) {
|
draw (batcher: PolygonBatcher, skeleton: Skeleton, slotRangeStart: number = -1, slotRangeEnd: number = -1) {
|
||||||
let clipper = this.clipper;
|
let clipper = this.clipper;
|
||||||
let premultipliedAlpha = this.premultipliedAlpha;
|
let premultipliedAlpha = this.premultipliedAlpha;
|
||||||
let twoColorTint = this.twoColorTint;
|
let twoColorTint = this.twoColorTint;
|
||||||
@ -75,9 +75,25 @@ module spine.webgl {
|
|||||||
let attachmentColor: Color = null;
|
let attachmentColor: Color = null;
|
||||||
let skeletonColor = skeleton.color;
|
let skeletonColor = skeleton.color;
|
||||||
let vertexSize = twoColorTint ? 12 : 8;
|
let vertexSize = twoColorTint ? 12 : 8;
|
||||||
|
let inRange = false;
|
||||||
|
if (slotRangeStart == -1) inRange = true;
|
||||||
for (let i = 0, n = drawOrder.length; i < n; i++) {
|
for (let i = 0, n = drawOrder.length; i < n; i++) {
|
||||||
let clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;
|
let clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;
|
||||||
let slot = drawOrder[i];
|
let slot = drawOrder[i];
|
||||||
|
|
||||||
|
if (slotRangeStart >= 0 && slotRangeStart == slot.data.index) {
|
||||||
|
inRange = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inRange) {
|
||||||
|
clipper.clipEndWithSlot(slot);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) {
|
||||||
|
inRange = false;
|
||||||
|
}
|
||||||
|
|
||||||
let attachment = slot.getAttachment();
|
let attachment = slot.getAttachment();
|
||||||
let texture: GLTexture = null;
|
let texture: GLTexture = null;
|
||||||
if (attachment instanceof RegionAttachment) {
|
if (attachment instanceof RegionAttachment) {
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
var canvas = document.getElementsByTagName("canvas")[0];
|
var canvas = document.getElementsByTagName("canvas")[0];
|
||||||
canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
|
canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
|
||||||
var context = new spine.webgl.ManagedWebGLRenderingContext(canvas);
|
var context = new spine.webgl.ManagedWebGLRenderingContext(canvas);
|
||||||
var assetManager = new spine.webgl.AssetManager(context, "https://esotericsoftware.com/sketch/files/4772/");
|
var assetManager = new spine.webgl.AssetManager(context, "../example/assets/");
|
||||||
var renderer = new spine.webgl.SceneRenderer(canvas, context);
|
var renderer = new spine.webgl.SceneRenderer(canvas, context);
|
||||||
var time = new spine.TimeKeeper();
|
var time = new spine.TimeKeeper();
|
||||||
var loadingScreen = new spine.webgl.LoadingScreen(new spine.webgl.SceneRenderer(canvas, context));
|
var loadingScreen = new spine.webgl.LoadingScreen(new spine.webgl.SceneRenderer(canvas, context));
|
||||||
@ -15,16 +15,16 @@ var loadingScreen = new spine.webgl.LoadingScreen(new spine.webgl.SceneRenderer(
|
|||||||
var skeleton = null;
|
var skeleton = null;
|
||||||
var animationState = null;
|
var animationState = null;
|
||||||
|
|
||||||
assetManager.loadText("Spineboy/spineboy-pro.json");
|
assetManager.loadText("spineboy-ess.json");
|
||||||
assetManager.loadTextureAtlas("Spineboy/spineboy-pro.atlas");
|
assetManager.loadTextureAtlas("spineboy.atlas");
|
||||||
|
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
var atlas = assetManager.get("Spineboy/spineboy-pro.atlas");
|
var atlas = assetManager.get("spineboy.atlas");
|
||||||
var skeletonJson = new spine.SkeletonJson(new spine.AtlasAttachmentLoader(atlas));
|
var skeletonJson = new spine.SkeletonJson(new spine.AtlasAttachmentLoader(atlas));
|
||||||
var skeletonData = skeletonJson.readSkeletonData(assetManager.get("Spineboy/spineboy-pro.json"));
|
var skeletonData = skeletonJson.readSkeletonData(assetManager.get("spineboy-ess.json"));
|
||||||
var animationStateData = new spine.AnimationStateData(skeletonData);
|
var animationStateData = new spine.AnimationStateData(skeletonData);
|
||||||
|
|
||||||
skeleton = new spine.Skeleton(skeletonData);
|
skeleton = new spine.Skeleton(skeletonData);
|
||||||
|
|||||||
114
spine-ts/webgl/tests/test-slot-range.html
Normal file
114
spine-ts/webgl/tests/test-slot-range.html
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<script src="../../build/spine-webgl.js"></script>
|
||||||
|
<canvas width="640" height="480"></canvas>
|
||||||
|
</body>
|
||||||
|
<script>
|
||||||
|
/*
|
||||||
|
This test illustrates how to render one skeleton in the
|
||||||
|
middle of rendering another skeleton. This technique can
|
||||||
|
be used to e.g. render different weapons on a character that
|
||||||
|
are themselves animated.
|
||||||
|
*/
|
||||||
|
var canvas = document.getElementsByTagName("canvas")[0];
|
||||||
|
canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
|
||||||
|
var context = new spine.webgl.ManagedWebGLRenderingContext(canvas);
|
||||||
|
var assetManager = new spine.webgl.AssetManager(context, "../example/assets/");
|
||||||
|
var renderer = new spine.webgl.SceneRenderer(canvas, context);
|
||||||
|
var time = new spine.TimeKeeper();
|
||||||
|
var loadingScreen = new spine.webgl.LoadingScreen(new spine.webgl.SceneRenderer(canvas, context));
|
||||||
|
|
||||||
|
var spineBoy;
|
||||||
|
var vine;
|
||||||
|
|
||||||
|
assetManager.loadText("spineboy-ess.json");
|
||||||
|
assetManager.loadTextureAtlas("spineboy.atlas");
|
||||||
|
|
||||||
|
assetManager.loadText("vine-pro.json");
|
||||||
|
assetManager.loadTextureAtlas("vine.atlas");
|
||||||
|
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
|
||||||
|
function loadSkeleton(json, atlas, scale) {
|
||||||
|
var atlas = assetManager.get(atlas);
|
||||||
|
var skeletonJson = new spine.SkeletonJson(new spine.AtlasAttachmentLoader(atlas));
|
||||||
|
skeletonJson.scale = scale;
|
||||||
|
var skeletonData = skeletonJson.readSkeletonData(assetManager.get(json));
|
||||||
|
var animationStateData = new spine.AnimationStateData(skeletonData);
|
||||||
|
|
||||||
|
skeleton = new spine.Skeleton(skeletonData);
|
||||||
|
animationState = new spine.AnimationState(animationStateData);
|
||||||
|
|
||||||
|
return { skeleton: skeleton, animationState: animationState };
|
||||||
|
}
|
||||||
|
|
||||||
|
function load () {
|
||||||
|
if (assetManager.isLoadingComplete()) {
|
||||||
|
spineBoy = loadSkeleton("spineboy-ess.json", "spineboy.atlas", 1);
|
||||||
|
vine = loadSkeleton("vine-pro.json", "vine.atlas", 0.3);
|
||||||
|
|
||||||
|
|
||||||
|
var offset = new spine.Vector2();
|
||||||
|
var size = new spine.Vector2();
|
||||||
|
spineBoy.skeleton.updateWorldTransform();
|
||||||
|
spineBoy.skeleton.getBounds(offset, size, []);
|
||||||
|
renderer.camera.position.x = offset.x + size.x / 2;
|
||||||
|
renderer.camera.position.y = offset.y + size.y / 2;
|
||||||
|
renderer.camera.zoom = size.x > size.y ? size.x / canvas.width : size.y / canvas.height;
|
||||||
|
|
||||||
|
spineBoy.animationState.setAnimation(0, "walk", true);
|
||||||
|
vine.animationState.setAnimation(0, "grow", true);
|
||||||
|
|
||||||
|
requestAnimationFrame(render);
|
||||||
|
} else {
|
||||||
|
loadingScreen.draw(false);
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function render () {
|
||||||
|
context.gl.clearColor(0.9, 0.9, 0.9, 1);
|
||||||
|
context.gl.clear(context.gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
time.update();
|
||||||
|
|
||||||
|
// Update Spineboy first
|
||||||
|
spineBoy.animationState.update(time.delta);
|
||||||
|
spineBoy.animationState.apply(spineBoy.skeleton);
|
||||||
|
spineBoy.skeleton.updateWorldTransform();
|
||||||
|
|
||||||
|
// Next figure out the world location of the bone
|
||||||
|
// we attach the vine to, and apply it to the vine's
|
||||||
|
// root bone. Note that the root bone must not be
|
||||||
|
// keyed! We also ignore scaling and shearing.
|
||||||
|
var gun = spineBoy.skeleton.findBone("gun");
|
||||||
|
var vineRoot = vine.skeleton.getRootBone();
|
||||||
|
vineRoot.x = gun.worldX;
|
||||||
|
vineRoot.y = gun.worldY;
|
||||||
|
vineRoot.rotation = gun.getWorldRotationX();
|
||||||
|
vine.animationState.update(time.delta);
|
||||||
|
vine.animationState.apply(vine.skeleton);
|
||||||
|
vine.skeleton.updateWorldTransform();
|
||||||
|
|
||||||
|
// Find the two slots inbetween we want to render the vine
|
||||||
|
var gunSlot = spineBoy.skeleton.findSlot("gun");
|
||||||
|
var rearFoot = spineBoy.skeleton.findSlot("rear-foot");
|
||||||
|
|
||||||
|
renderer.begin();
|
||||||
|
// render from the back most slot (-1) to the gun slot (inclusive)
|
||||||
|
renderer.drawSkeleton(spineBoy.skeleton, true, -1, gunSlot.data.index);
|
||||||
|
|
||||||
|
// now render the vine
|
||||||
|
renderer.drawSkeleton(vine.skeleton, false);
|
||||||
|
|
||||||
|
// finally render the remaining spineboy slots starting at the rear foot
|
||||||
|
// (the next slot after the gun)
|
||||||
|
renderer.drawSkeleton(spineBoy.skeleton, true, rearFoot.data.index, -1);
|
||||||
|
renderer.end();
|
||||||
|
|
||||||
|
loadingScreen.draw(true);
|
||||||
|
|
||||||
|
requestAnimationFrame(render);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
Loading…
x
Reference in New Issue
Block a user