mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-05 10:16:54 +08:00
Merge branch 'EsotericSoftware/3.6' into 3.6
This commit is contained in:
commit
69f1e88ea6
@ -66,6 +66,7 @@ public class SkeletonRenderer {
|
|||||||
if (vertexEffect != null) vertexEffect.begin(skeleton);
|
if (vertexEffect != null) vertexEffect.begin(skeleton);
|
||||||
|
|
||||||
boolean premultipliedAlpha = this.premultipliedAlpha;
|
boolean premultipliedAlpha = this.premultipliedAlpha;
|
||||||
|
BlendMode blendMode = null;
|
||||||
float[] vertices = this.vertices.items;
|
float[] vertices = this.vertices.items;
|
||||||
Color skeletonColor = skeleton.color;
|
Color skeletonColor = skeleton.color;
|
||||||
float r = skeletonColor.r, g = skeletonColor.g, b = skeletonColor.b, a = skeletonColor.a;
|
float r = skeletonColor.r, g = skeletonColor.g, b = skeletonColor.b, a = skeletonColor.a;
|
||||||
@ -79,6 +80,17 @@ public class SkeletonRenderer {
|
|||||||
Color color = region.getColor(), slotColor = slot.getColor();
|
Color color = region.getColor(), slotColor = slot.getColor();
|
||||||
float alpha = a * slotColor.a * color.a * 255;
|
float alpha = a * slotColor.a * color.a * 255;
|
||||||
float multiplier = premultipliedAlpha ? alpha : 255;
|
float multiplier = premultipliedAlpha ? alpha : 255;
|
||||||
|
|
||||||
|
BlendMode slotBlendMode = slot.data.getBlendMode();
|
||||||
|
if (slotBlendMode != blendMode) {
|
||||||
|
if (slotBlendMode == BlendMode.additive && premultipliedAlpha) {
|
||||||
|
slotBlendMode = BlendMode.normal;
|
||||||
|
alpha = 0;
|
||||||
|
}
|
||||||
|
blendMode = slotBlendMode;
|
||||||
|
batch.setBlendFunction(blendMode.getSource(premultipliedAlpha), blendMode.getDest());
|
||||||
|
}
|
||||||
|
|
||||||
float c = NumberUtils.intToFloatColor(((int)alpha << 24) //
|
float c = NumberUtils.intToFloatColor(((int)alpha << 24) //
|
||||||
| ((int)(b * slotColor.b * color.b * multiplier) << 16) //
|
| ((int)(b * slotColor.b * color.b * multiplier) << 16) //
|
||||||
| ((int)(g * slotColor.g * color.g * multiplier) << 8) //
|
| ((int)(g * slotColor.g * color.g * multiplier) << 8) //
|
||||||
@ -92,8 +104,6 @@ public class SkeletonRenderer {
|
|||||||
|
|
||||||
if (vertexEffect != null) applyVertexEffect(vertices, 20, 5, c, 0);
|
if (vertexEffect != null) applyVertexEffect(vertices, 20, 5, c, 0);
|
||||||
|
|
||||||
BlendMode blendMode = slot.data.getBlendMode();
|
|
||||||
batch.setBlendFunction(blendMode.getSource(premultipliedAlpha), blendMode.getDest());
|
|
||||||
batch.draw(region.getRegion().getTexture(), vertices, 0, 20);
|
batch.draw(region.getRegion().getTexture(), vertices, 0, 20);
|
||||||
|
|
||||||
} else if (attachment instanceof ClippingAttachment) {
|
} else if (attachment instanceof ClippingAttachment) {
|
||||||
@ -101,9 +111,8 @@ public class SkeletonRenderer {
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
} else if (attachment instanceof MeshAttachment) {
|
} else if (attachment instanceof MeshAttachment) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(batch.getClass().getSimpleName()
|
||||||
"SkeletonRenderer#draw(PolygonSpriteBatch, Skeleton) or #draw(TwoColorPolygonBatch, Skeleton) must be used to "
|
+ " cannot render meshes, PolygonSpriteBatch or TwoColorPolygonBatch is required.");
|
||||||
+ "render meshes.");
|
|
||||||
|
|
||||||
} else if (attachment instanceof SkeletonAttachment) {
|
} else if (attachment instanceof SkeletonAttachment) {
|
||||||
Skeleton attachmentSkeleton = ((SkeletonAttachment)attachment).getSkeleton();
|
Skeleton attachmentSkeleton = ((SkeletonAttachment)attachment).getSkeleton();
|
||||||
@ -175,17 +184,22 @@ public class SkeletonRenderer {
|
|||||||
Color slotColor = slot.getColor();
|
Color slotColor = slot.getColor();
|
||||||
float alpha = a * slotColor.a * color.a * 255;
|
float alpha = a * slotColor.a * color.a * 255;
|
||||||
float multiplier = premultipliedAlpha ? alpha : 255;
|
float multiplier = premultipliedAlpha ? alpha : 255;
|
||||||
|
|
||||||
|
BlendMode slotBlendMode = slot.data.getBlendMode();
|
||||||
|
if (slotBlendMode != blendMode) {
|
||||||
|
if (slotBlendMode == BlendMode.additive && premultipliedAlpha) {
|
||||||
|
slotBlendMode = BlendMode.normal;
|
||||||
|
alpha = 0;
|
||||||
|
}
|
||||||
|
blendMode = slotBlendMode;
|
||||||
|
batch.setBlendFunction(blendMode.getSource(premultipliedAlpha), blendMode.getDest());
|
||||||
|
}
|
||||||
|
|
||||||
float c = NumberUtils.intToFloatColor(((int)alpha << 24) //
|
float c = NumberUtils.intToFloatColor(((int)alpha << 24) //
|
||||||
| ((int)(b * slotColor.b * color.b * multiplier) << 16) //
|
| ((int)(b * slotColor.b * color.b * multiplier) << 16) //
|
||||||
| ((int)(g * slotColor.g * color.g * multiplier) << 8) //
|
| ((int)(g * slotColor.g * color.g * multiplier) << 8) //
|
||||||
| (int)(r * slotColor.r * color.r * multiplier));
|
| (int)(r * slotColor.r * color.r * multiplier));
|
||||||
|
|
||||||
BlendMode slotBlendMode = slot.data.getBlendMode();
|
|
||||||
if (slotBlendMode != blendMode) {
|
|
||||||
blendMode = slotBlendMode;
|
|
||||||
batch.setBlendFunction(blendMode.getSource(premultipliedAlpha), blendMode.getDest());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (clipper.isClipping()) {
|
if (clipper.isClipping()) {
|
||||||
clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length, uvs, c, 0, false);
|
clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length, uvs, c, 0, false);
|
||||||
FloatArray clippedVertices = clipper.getClippedVertices();
|
FloatArray clippedVertices = clipper.getClippedVertices();
|
||||||
@ -288,6 +302,17 @@ public class SkeletonRenderer {
|
|||||||
Color lightColor = slot.getColor();
|
Color lightColor = slot.getColor();
|
||||||
float alpha = a * lightColor.a * color.a * 255;
|
float alpha = a * lightColor.a * color.a * 255;
|
||||||
float multiplier = premultipliedAlpha ? alpha : 255;
|
float multiplier = premultipliedAlpha ? alpha : 255;
|
||||||
|
|
||||||
|
BlendMode slotBlendMode = slot.data.getBlendMode();
|
||||||
|
if (slotBlendMode != blendMode) {
|
||||||
|
if (slotBlendMode == BlendMode.additive && premultipliedAlpha) {
|
||||||
|
slotBlendMode = BlendMode.normal;
|
||||||
|
alpha = 0;
|
||||||
|
}
|
||||||
|
blendMode = slotBlendMode;
|
||||||
|
batch.setBlendFunction(blendMode.getSource(premultipliedAlpha), blendMode.getDest());
|
||||||
|
}
|
||||||
|
|
||||||
float red = r * color.r * multiplier;
|
float red = r * color.r * multiplier;
|
||||||
float green = g * color.g * multiplier;
|
float green = g * color.g * multiplier;
|
||||||
float blue = b * color.b * multiplier;
|
float blue = b * color.b * multiplier;
|
||||||
@ -301,12 +326,6 @@ public class SkeletonRenderer {
|
|||||||
| (int)(green * darkColor.g) << 8 //
|
| (int)(green * darkColor.g) << 8 //
|
||||||
| (int)(red * darkColor.r));
|
| (int)(red * darkColor.r));
|
||||||
|
|
||||||
BlendMode slotBlendMode = slot.data.getBlendMode();
|
|
||||||
if (slotBlendMode != blendMode) {
|
|
||||||
blendMode = slotBlendMode;
|
|
||||||
batch.setBlendFunction(blendMode.getSource(premultipliedAlpha), blendMode.getDest());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (clipper.isClipping()) {
|
if (clipper.isClipping()) {
|
||||||
clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length, uvs, light, dark, true);
|
clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length, uvs, light, dark, true);
|
||||||
FloatArray clippedVertices = clipper.getClippedVertices();
|
FloatArray clippedVertices = clipper.getClippedVertices();
|
||||||
|
|||||||
@ -253,7 +253,7 @@ public class SkeletonViewer extends ApplicationAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void render () {
|
public void render () {
|
||||||
Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 1);
|
Gdx.gl.glClearColor(112 / 255f, 111 / 255f, 118 / 255f, 1);
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
float delta = Gdx.graphics.getDeltaTime();
|
float delta = Gdx.graphics.getDeltaTime();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user