mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
Merge branch 'EsotericSoftware/3.6' into 3.6
This commit is contained in:
commit
8ebb36daa9
@ -25,6 +25,7 @@
|
|||||||
* Added support for clipping.
|
* Added support for clipping.
|
||||||
* Added support for rotated regions in texture atlas loaded via StarlingAtlasAttachmentLoader.
|
* Added support for rotated regions in texture atlas loaded via StarlingAtlasAttachmentLoader.
|
||||||
* Added support for vertex effects. See `RaptorExample.as`
|
* Added support for vertex effects. See `RaptorExample.as`
|
||||||
|
* Added 'getTexture()' method to 'StarlingTextureAtlasAttachmentLoader'
|
||||||
|
|
||||||
## C
|
## C
|
||||||
* **Breaking changes**
|
* **Breaking changes**
|
||||||
@ -52,7 +53,6 @@
|
|||||||
* Added `spVertexEffect` and corresponding implementations `spJitterVertexEffect` and `spSwirlVertexEffect`. Create/dispose through the corresponding `spXXXVertexEffect_create()/dispose()` functions. Set on framework/engine specific renderer. See changes for spine-c based frameworks/engines below.
|
* Added `spVertexEffect` and corresponding implementations `spJitterVertexEffect` and `spSwirlVertexEffect`. Create/dispose through the corresponding `spXXXVertexEffect_create()/dispose()` functions. Set on framework/engine specific renderer. See changes for spine-c based frameworks/engines below.
|
||||||
* Functions in `extension.h` are not prefixed with `_sp` instead of just `_` to avoid interference with other libraries.
|
* Functions in `extension.h` are not prefixed with `_sp` instead of just `_` to avoid interference with other libraries.
|
||||||
* Introduced `SP_API` macro. Every spine-c function is prefixed with this macro. By default, it is an empty string. Can be used to markup spine-c functions with e.g. ``__declspec` when compiling to a dll or linking to that dll.
|
* Introduced `SP_API` macro. Every spine-c function is prefixed with this macro. By default, it is an empty string. Can be used to markup spine-c functions with e.g. ``__declspec` when compiling to a dll or linking to that dll.
|
||||||
* Added `void* userData` to `spAnimationState` to be consumed in callbacks.
|
|
||||||
|
|
||||||
### Cocos2d-X
|
### Cocos2d-X
|
||||||
* Fixed renderer to work with 3.6 changes
|
* Fixed renderer to work with 3.6 changes
|
||||||
@ -64,6 +64,7 @@
|
|||||||
* SkeletonRenderer now combines the displayed color of the Node (cascaded from all parents) with the skeleton color for tinting.
|
* SkeletonRenderer now combines the displayed color of the Node (cascaded from all parents) with the skeleton color for tinting.
|
||||||
* Added support for vertex effects. See `RaptorExample.cpp`.
|
* Added support for vertex effects. See `RaptorExample.cpp`.
|
||||||
* Added ETC1 alpha support, thanks @halx99! Does not work when two color tint is enabled.
|
* Added ETC1 alpha support, thanks @halx99! Does not work when two color tint is enabled.
|
||||||
|
* Added `spAtlasPage_setCustomTextureLoader()` which let's you do texture loading manually. Thanks @jareguo.
|
||||||
|
|
||||||
### Cocos2d-Objc
|
### Cocos2d-Objc
|
||||||
* Fixed renderer to work with 3.6 changes
|
* Fixed renderer to work with 3.6 changes
|
||||||
@ -84,7 +85,6 @@
|
|||||||
* Added support for two color tinting. All base materials, e.g. SpineUnlitNormalMaterial, now do proper two color tinting. No material parameters have changed.
|
* Added support for two color tinting. All base materials, e.g. SpineUnlitNormalMaterial, now do proper two color tinting. No material parameters have changed.
|
||||||
* Updated to Unreal Engine 4.16.1. Note that 4.16 has a regression which will make it impossible to compile plain .c files!
|
* Updated to Unreal Engine 4.16.1. Note that 4.16 has a regression which will make it impossible to compile plain .c files!
|
||||||
* spine-c is now exposed from the plugin shared library on Windows via __declspec.
|
* spine-c is now exposed from the plugin shared library on Windows via __declspec.
|
||||||
* `SkeletonRenderComponent` now generates collision meshes by default.
|
|
||||||
|
|
||||||
## C#
|
## C#
|
||||||
* **Breaking changes**
|
* **Breaking changes**
|
||||||
@ -147,7 +147,9 @@
|
|||||||
* Removed `RegionBatcher` and `SkeletonRegionRenderer`, renamed `SkeletonMeshRenderer` to `SkeletonRenderer`
|
* Removed `RegionBatcher` and `SkeletonRegionRenderer`, renamed `SkeletonMeshRenderer` to `SkeletonRenderer`
|
||||||
* Added support for two color tint. For it to work, you need to add the `SpineEffect.fx` file to your content project, then load it via `var effect = Content.Load<Effect>("SpineEffect");`, and set it on the `SkeletonRenderer`. See the example project for code.
|
* Added support for two color tint. For it to work, you need to add the `SpineEffect.fx` file to your content project, then load it via `var effect = Content.Load<Effect>("SpineEffect");`, and set it on the `SkeletonRenderer`. See the example project for code.
|
||||||
* Added support for any `Effect` to be used by `SkeletonRenderer`
|
* Added support for any `Effect` to be used by `SkeletonRenderer`
|
||||||
|
* Added support for `IVertexEffect` to modify vertices of skeletons on the CPU. `IVertexEffect` instances can be set on the `SkeletonRenderer`. See example project.
|
||||||
* Added `SkeletonDebugRenderer`
|
* Added `SkeletonDebugRenderer`
|
||||||
|
* Made `MeshBatcher` of SkeletonRenderer accessible via a getter. Allows user to batch their own geometry together with skeleton meshes for maximum batching instead of using XNA SpriteBatcher.
|
||||||
|
|
||||||
## Java
|
## Java
|
||||||
* **Breaking changes**
|
* **Breaking changes**
|
||||||
|
|||||||
@ -31,6 +31,13 @@
|
|||||||
#include <spine/spine-cocos2dx.h>
|
#include <spine/spine-cocos2dx.h>
|
||||||
#include <spine/extension.h>
|
#include <spine/extension.h>
|
||||||
|
|
||||||
|
namespace spine {
|
||||||
|
static CustomTextureLoader _customTextureLoader = nullptr;
|
||||||
|
void spAtlasPage_setCustomTextureLoader (CustomTextureLoader texLoader) {
|
||||||
|
_customTextureLoader = texLoader;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
USING_NS_CC;
|
USING_NS_CC;
|
||||||
|
|
||||||
GLuint wrap (spAtlasWrap wrap) {
|
GLuint wrap (spAtlasWrap wrap) {
|
||||||
@ -60,7 +67,13 @@ GLuint filter (spAtlasFilter filter) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _spAtlasPage_createTexture (spAtlasPage* self, const char* path) {
|
void _spAtlasPage_createTexture (spAtlasPage* self, const char* path) {
|
||||||
Texture2D* texture = Director::getInstance()->getTextureCache()->addImage(path);
|
Texture2D* texture = nullptr;
|
||||||
|
if (spine::_customTextureLoader) {
|
||||||
|
texture = spine::_customTextureLoader(path);
|
||||||
|
}
|
||||||
|
if (!texture) {
|
||||||
|
texture = Director::getInstance()->getTextureCache()->addImage(path);
|
||||||
|
}
|
||||||
CCASSERT(texture != nullptr, "Invalid image");
|
CCASSERT(texture != nullptr, "Invalid image");
|
||||||
texture->retain();
|
texture->retain();
|
||||||
|
|
||||||
|
|||||||
@ -38,4 +38,10 @@
|
|||||||
#include <spine/SkeletonAnimation.h>
|
#include <spine/SkeletonAnimation.h>
|
||||||
#include <spine/SkeletonBatch.h>
|
#include <spine/SkeletonBatch.h>
|
||||||
|
|
||||||
|
namespace spine {
|
||||||
|
typedef cocos2d::Texture2D* (*CustomTextureLoader)(const char* path);
|
||||||
|
// set custom texture loader for _spAtlasPage_createTexture
|
||||||
|
void spAtlasPage_setCustomTextureLoader(CustomTextureLoader texLoader);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* SPINE_COCOS2DX_H_ */
|
#endif /* SPINE_COCOS2DX_H_ */
|
||||||
|
|||||||
@ -258,7 +258,7 @@ namespace Spine {
|
|||||||
return clipped;
|
return clipped;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MakeClockwise (ExposedList<float> polygon) {
|
public static void MakeClockwise (ExposedList<float> polygon) {
|
||||||
float[] vertices = polygon.Items;
|
float[] vertices = polygon.Items;
|
||||||
int verticeslength = polygon.Count;
|
int verticeslength = polygon.Count;
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Spine {
|
namespace Spine {
|
||||||
internal class Triangulator {
|
public class Triangulator {
|
||||||
private readonly ExposedList<ExposedList<float>> convexPolygons = new ExposedList<ExposedList<float>>();
|
private readonly ExposedList<ExposedList<float>> convexPolygons = new ExposedList<ExposedList<float>>();
|
||||||
private readonly ExposedList<ExposedList<int>> convexPolygonsIndices = new ExposedList<ExposedList<int>>();
|
private readonly ExposedList<ExposedList<int>> convexPolygonsIndices = new ExposedList<ExposedList<int>>();
|
||||||
|
|
||||||
|
|||||||
@ -57,6 +57,7 @@ import com.badlogic.gdx.graphics.Texture.TextureFilter;
|
|||||||
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
|
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion;
|
import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion;
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData;
|
import com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData;
|
||||||
|
import com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData.Page;
|
||||||
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
|
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
|
||||||
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
|
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
|
||||||
import com.badlogic.gdx.math.MathUtils;
|
import com.badlogic.gdx.math.MathUtils;
|
||||||
@ -96,6 +97,7 @@ public class SkeletonViewer extends ApplicationAdapter {
|
|||||||
|
|
||||||
OrthographicCamera camera;
|
OrthographicCamera camera;
|
||||||
TwoColorPolygonBatch batch;
|
TwoColorPolygonBatch batch;
|
||||||
|
TextureAtlas atlas;
|
||||||
SkeletonRenderer renderer;
|
SkeletonRenderer renderer;
|
||||||
SkeletonRendererDebug debugRenderer;
|
SkeletonRendererDebug debugRenderer;
|
||||||
SkeletonData skeletonData;
|
SkeletonData skeletonData;
|
||||||
@ -155,7 +157,20 @@ public class SkeletonViewer extends ApplicationAdapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
TextureAtlasData data = !atlasFile.exists() ? null : new TextureAtlasData(atlasFile, atlasFile.parent(), false);
|
TextureAtlasData data = !atlasFile.exists() ? null : new TextureAtlasData(atlasFile, atlasFile.parent(), false);
|
||||||
TextureAtlas atlas = new TextureAtlas(data) {
|
|
||||||
|
if (data != null) {
|
||||||
|
boolean linear = true;
|
||||||
|
for (int i = 0, n = data.getPages().size; i < n; i++) {
|
||||||
|
Page page = data.getPages().get(i);
|
||||||
|
if (page.minFilter != TextureFilter.Linear || page.magFilter != TextureFilter.Linear) {
|
||||||
|
linear = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ui.linearCheckbox.setChecked(linear);
|
||||||
|
}
|
||||||
|
|
||||||
|
atlas = new TextureAtlas(data) {
|
||||||
public AtlasRegion findRegion (String name) {
|
public AtlasRegion findRegion (String name) {
|
||||||
AtlasRegion region = super.findRegion(name);
|
AtlasRegion region = super.findRegion(name);
|
||||||
if (region == null) {
|
if (region == null) {
|
||||||
@ -416,6 +431,8 @@ public class SkeletonViewer extends ApplicationAdapter {
|
|||||||
|
|
||||||
CheckBox premultipliedCheckbox = new CheckBox("Premultiplied", skin);
|
CheckBox premultipliedCheckbox = new CheckBox("Premultiplied", skin);
|
||||||
|
|
||||||
|
CheckBox linearCheckbox = new CheckBox("Linear", skin);
|
||||||
|
|
||||||
TextButton bonesSetupPoseButton = new TextButton("Bones", skin);
|
TextButton bonesSetupPoseButton = new TextButton("Bones", skin);
|
||||||
TextButton slotsSetupPoseButton = new TextButton("Slots", skin);
|
TextButton slotsSetupPoseButton = new TextButton("Slots", skin);
|
||||||
TextButton setupPoseButton = new TextButton("Both", skin);
|
TextButton setupPoseButton = new TextButton("Both", skin);
|
||||||
@ -458,6 +475,8 @@ public class SkeletonViewer extends ApplicationAdapter {
|
|||||||
|
|
||||||
premultipliedCheckbox.setChecked(true);
|
premultipliedCheckbox.setChecked(true);
|
||||||
|
|
||||||
|
linearCheckbox.setChecked(true);
|
||||||
|
|
||||||
loopCheckbox.setChecked(true);
|
loopCheckbox.setChecked(true);
|
||||||
|
|
||||||
scaleSlider.setValue(1);
|
scaleSlider.setValue(1);
|
||||||
@ -519,7 +538,13 @@ public class SkeletonViewer extends ApplicationAdapter {
|
|||||||
root.add();
|
root.add();
|
||||||
root.add(table(debugMeshHullCheckbox, debugMeshTrianglesCheckbox)).row();
|
root.add(table(debugMeshHullCheckbox, debugMeshTrianglesCheckbox)).row();
|
||||||
root.add("Atlas alpha:");
|
root.add("Atlas alpha:");
|
||||||
root.add(premultipliedCheckbox).row();
|
{
|
||||||
|
Table table = table();
|
||||||
|
table.add(premultipliedCheckbox);
|
||||||
|
table.add("Filtering:").growX().getActor().setAlignment(Align.right);
|
||||||
|
table.add(linearCheckbox);
|
||||||
|
root.add(table).fill().row();
|
||||||
|
}
|
||||||
|
|
||||||
root.add(new Image(skin.newDrawable("white", new Color(0x4e4e4eff)))).height(1).fillX().colspan(2).pad(-3, 0, 1, 0)
|
root.add(new Image(skin.newDrawable("white", new Color(0x4e4e4eff)))).height(1).fillX().colspan(2).pad(-3, 0, 1, 0)
|
||||||
.row();
|
.row();
|
||||||
@ -739,6 +764,15 @@ public class SkeletonViewer extends ApplicationAdapter {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
linearCheckbox.addListener(new ChangeListener() {
|
||||||
|
public void changed (ChangeEvent event, Actor actor) {
|
||||||
|
if (atlas == null) return;
|
||||||
|
TextureFilter filter = linearCheckbox.isChecked() ? TextureFilter.Linear : TextureFilter.Nearest;
|
||||||
|
for (Texture texture : atlas.getTextures())
|
||||||
|
texture.setFilter(filter, filter);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
skinList.addListener(new ChangeListener() {
|
skinList.addListener(new ChangeListener() {
|
||||||
public void changed (ChangeEvent event, Actor actor) {
|
public void changed (ChangeEvent event, Actor actor) {
|
||||||
if (skeleton != null) {
|
if (skeleton != null) {
|
||||||
@ -834,7 +868,7 @@ public class SkeletonViewer extends ApplicationAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Table table (Actor... actors) {
|
Table table (Actor... actors) {
|
||||||
Table table = new Table();
|
Table table = new Table(skin);
|
||||||
table.defaults().space(6);
|
table.defaults().space(6);
|
||||||
table.add(actors);
|
table.add(actors);
|
||||||
return table;
|
return table;
|
||||||
|
|||||||
@ -51,7 +51,7 @@ float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
|
|||||||
float alpha = texColor.a * input.Color.a;
|
float alpha = texColor.a * input.Color.a;
|
||||||
float4 output;
|
float4 output;
|
||||||
output.a = alpha;
|
output.a = alpha;
|
||||||
output.rgb = (1.0 - texColor.rgb) * input.Color2.rgb * alpha + texColor.rgb * input.Color.rgb;
|
output.rgb = ((texColor.a - 1.0) * input.Color2.a + 1.0 - texColor.rgb) * input.Color2.rgb + texColor.rgb * input.Color.rgb;
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|||||||
14
spine-ts/webgl/example/js/ace.js
Normal file
14
spine-ts/webgl/example/js/ace.js
Normal file
File diff suppressed because one or more lines are too long
1
spine-ts/webgl/example/js/mode-html.js
Normal file
1
spine-ts/webgl/example/js/mode-html.js
Normal file
File diff suppressed because one or more lines are too long
1
spine-ts/webgl/example/js/mode-javascript.js
Normal file
1
spine-ts/webgl/example/js/mode-javascript.js
Normal file
File diff suppressed because one or more lines are too long
1
spine-ts/webgl/example/js/theme-monokai.js
Normal file
1
spine-ts/webgl/example/js/theme-monokai.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
|
||||||
1
spine-ts/webgl/example/js/worker-html.js
Normal file
1
spine-ts/webgl/example/js/worker-html.js
Normal file
File diff suppressed because one or more lines are too long
1
spine-ts/webgl/example/js/worker-javascript.js
Normal file
1
spine-ts/webgl/example/js/worker-javascript.js
Normal file
File diff suppressed because one or more lines are too long
96
spine-ts/webgl/example/tutorial.html
Normal file
96
spine-ts/webgl/example/tutorial.html
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<html>
|
||||||
|
<script src="../../build/spine-webgl.js"></script>
|
||||||
|
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
|
||||||
|
<style>
|
||||||
|
/* Dead Simple Grid (c) 2015 Vladimir Agafonkin */
|
||||||
|
|
||||||
|
.row .row { margin: 0 -1.5em; }
|
||||||
|
.col { padding: 0 1.5em; }
|
||||||
|
|
||||||
|
.row:after {
|
||||||
|
content: "";
|
||||||
|
clear: both;
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen { .col {
|
||||||
|
float: left;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 30em) {
|
||||||
|
.content { width: 50%; height: 100%; padding: 0 }
|
||||||
|
.sidebar { width: 50%; height: 100%; padding: 0 }
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
iframe {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
.panel {
|
||||||
|
width: 100%;
|
||||||
|
height: 50%;
|
||||||
|
}
|
||||||
|
.buttons {
|
||||||
|
position: absolute;
|
||||||
|
top: 5; left: 5;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<div class="buttons">
|
||||||
|
<button id="playButton">Run</button>
|
||||||
|
<button id="stopButton">Stop</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col content">
|
||||||
|
<iframe id="iframe"></iframe>
|
||||||
|
</div>
|
||||||
|
<div class="col sidebar">
|
||||||
|
<div id="codeJs" class="panel"></div>
|
||||||
|
<div id="codeHtml" class="panel"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script id="initialJs" type="text/plain">
|
||||||
|
var canvas = document.getElementById("canvas");
|
||||||
|
var config = { alpha: false };
|
||||||
|
var context = new spine.webgl.ManagedWebGLRenderingContext(canvas, config);
|
||||||
|
var gl = context.gl;
|
||||||
|
|
||||||
|
function render() {
|
||||||
|
gl.clearColor(0.2, 0.2, 0.2, 1);
|
||||||
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
requestAnimationFrame(render);
|
||||||
|
}
|
||||||
|
|
||||||
|
requestAnimationFrame(render);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script src="js/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
var editorJs = ace.edit("codeJs");
|
||||||
|
editorJs.setTheme("ace/theme/monokai");
|
||||||
|
editorJs.getSession().setMode("ace/mode/javascript");
|
||||||
|
editorJs.setValue(document.getElementById("initialJs").innerHTML);
|
||||||
|
|
||||||
|
var editorHtml = ace.edit("codeHtml");
|
||||||
|
editorHtml.setTheme("ace/theme/monokai");
|
||||||
|
editorHtml.getSession().setMode("ace/mode/html");
|
||||||
|
editorHtml.setValue('<script src="../../build/spine-webgl.js"><\/script>\n<canvas id="canvas" style="width: 100%; height: 98vh;"></canvas>');
|
||||||
|
|
||||||
|
$("#playButton").click(function() {
|
||||||
|
var iframe = document.getElementById("iframe");
|
||||||
|
var source = "<html><body>" + editorHtml.getValue() + "<script>" + editorJs.getValue() + "<\/script></body></html>";
|
||||||
|
iframe.srcdoc = source;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -42,7 +42,7 @@ float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
|
|||||||
float alpha = texColor.a * input.Color.a;
|
float alpha = texColor.a * input.Color.a;
|
||||||
float4 output;
|
float4 output;
|
||||||
output.a = alpha;
|
output.a = alpha;
|
||||||
output.rgb = (1.0 - texColor.rgb) * input.Color2.rgb * alpha + texColor.rgb * input.Color.rgb;
|
output.rgb = ((texColor.a - 1.0) * input.Color2.a + 1.0 - texColor.rgb) * input.Color2.rgb + texColor.rgb * input.Color.rgb;
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -85,10 +85,10 @@ namespace Spine {
|
|||||||
skeletonDebugRenderer.DrawClipping = true;
|
skeletonDebugRenderer.DrawClipping = true;
|
||||||
|
|
||||||
// String name = "spineboy-ess";
|
// String name = "spineboy-ess";
|
||||||
String name = "goblins-pro";
|
// String name = "goblins-pro";
|
||||||
// String name = "raptor-pro";
|
// String name = "raptor-pro";
|
||||||
// String name = "tank-pro";
|
// String name = "tank-pro";
|
||||||
// String name = "coin-pro";
|
String name = "coin-pro";
|
||||||
String atlasName = name.Replace("-pro", "").Replace("-ess", "");
|
String atlasName = name.Replace("-pro", "").Replace("-ess", "");
|
||||||
if (name == "goblins-pro") atlasName = "goblins-mesh";
|
if (name == "goblins-pro") atlasName = "goblins-mesh";
|
||||||
bool binaryData = false;
|
bool binaryData = false;
|
||||||
|
|||||||
@ -45,6 +45,7 @@ namespace Spine {
|
|||||||
SkeletonClipping clipper = new SkeletonClipping();
|
SkeletonClipping clipper = new SkeletonClipping();
|
||||||
GraphicsDevice device;
|
GraphicsDevice device;
|
||||||
MeshBatcher batcher;
|
MeshBatcher batcher;
|
||||||
|
public MeshBatcher Batcher { get { return batcher; } }
|
||||||
RasterizerState rasterizerState;
|
RasterizerState rasterizerState;
|
||||||
float[] vertices = new float[8];
|
float[] vertices = new float[8];
|
||||||
int[] quadTriangles = { 0, 1, 2, 2, 3, 0 };
|
int[] quadTriangles = { 0, 1, 2, 2, 3, 0 };
|
||||||
@ -163,8 +164,13 @@ namespace Spine {
|
|||||||
|
|
||||||
Color darkColor = new Color();
|
Color darkColor = new Color();
|
||||||
if (slot.HasSecondColor) {
|
if (slot.HasSecondColor) {
|
||||||
darkColor = new Color(slot.R2, slot.G2, slot.B2);
|
if (premultipliedAlpha) {
|
||||||
|
darkColor = new Color(slot.R2 * a, slot.G2 * a, slot.B2 * a);
|
||||||
|
} else {
|
||||||
|
darkColor = new Color(slot.R2 * a, slot.G2 * a, slot.B2 * a);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
darkColor.A = premultipliedAlpha ? (byte)255 : (byte)0;
|
||||||
|
|
||||||
// clip
|
// clip
|
||||||
if (clipper.IsClipping()) {
|
if (clipper.IsClipping()) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user