Skip to content

Commit 240b849

Browse files
committed
New WebGL renderer that uses proper batching, renderer look-ahead and a single mvp and skeleton placement
1 parent 9fc7d74 commit 240b849

1 file changed

Lines changed: 45 additions & 21 deletions

File tree

plugins/spine/src/gameobject/SpineGameObjectWebGLRenderer.js

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
var CounterClockwise = require('../../../../src/math/angle/CounterClockwise');
8+
var RadToDeg = require('../../../../src/math/RadToDeg');
89

910
/**
1011
* Renders this Game Object with the Canvas Renderer to the given Camera.
@@ -23,13 +24,12 @@ var CounterClockwise = require('../../../../src/math/angle/CounterClockwise');
2324
*/
2425
var SpineGameObjectWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)
2526
{
26-
var pipeline = renderer.currentPipeline;
2727
var plugin = src.plugin;
2828
var mvp = plugin.mvp;
2929

3030
var shader = plugin.shader;
3131
var batcher = plugin.batcher;
32-
var runtime = src.runtime;
32+
var runtime = plugin.runtime;
3333
var skeleton = src.skeleton;
3434
var skeletonRenderer = plugin.skeletonRenderer;
3535

@@ -38,7 +38,10 @@ var SpineGameObjectWebGLRenderer = function (renderer, src, interpolationPercent
3838
return;
3939
}
4040

41-
renderer.clearPipeline();
41+
if (renderer.newType)
42+
{
43+
renderer.clearPipeline();
44+
}
4245

4346
var camMatrix = renderer._tempMatrix1;
4447
var spriteMatrix = renderer._tempMatrix2;
@@ -73,38 +76,60 @@ var SpineGameObjectWebGLRenderer = function (renderer, src, interpolationPercent
7376
var width = renderer.width;
7477
var height = renderer.height;
7578

76-
var data = calcMatrix.decomposeMatrix();
79+
skeleton.x = calcMatrix.tx;
80+
skeleton.y = height - calcMatrix.ty;
81+
skeleton.scaleX = calcMatrix.scaleX;
82+
skeleton.scaleY = calcMatrix.scaleY;
7783

78-
mvp.ortho(0, width, 0, height, 0, 1);
79-
mvp.translateXYZ(data.translateX, height - data.translateY, 0);
80-
mvp.rotateZ(CounterClockwise(data.rotation));
81-
mvp.scaleXYZ(data.scaleX, data.scaleY, 1);
84+
src.root.rotation = RadToDeg(CounterClockwise(calcMatrix.rotation));
8285

83-
// For a Stage 1 release we'll handle it like this:
84-
shader.bind();
85-
shader.setUniformi(runtime.webgl.Shader.SAMPLER, 0);
86-
shader.setUniform4x4f(runtime.webgl.Shader.MVP_MATRIX, mvp.val);
86+
// Add autoUpdate option
87+
skeleton.updateWorldTransform();
88+
89+
if (renderer.newType)
90+
{
91+
mvp.ortho(0, width, 0, height, 0, 1);
8792

88-
// For Stage 2, we'll move to using a custom pipeline, so Spine objects are batched
93+
shader.bind();
94+
shader.setUniformi(runtime.Shader.SAMPLER, 0);
95+
shader.setUniform4x4f(runtime.Shader.MVP_MATRIX, mvp.val);
8996

90-
batcher.begin(shader);
97+
batcher.begin(shader);
9198

92-
skeletonRenderer.premultipliedAlpha = true;
99+
skeletonRenderer.premultipliedAlpha = true;
100+
}
101+
102+
if (renderer.nextTypeMatch)
103+
{
104+
batcher.isDrawing = false;
105+
}
93106

107+
// Draw the current skeleton
94108
skeletonRenderer.draw(batcher, skeleton);
95109

96-
batcher.end();
110+
if (!renderer.nextTypeMatch)
111+
{
112+
// The next object in the display list is not a Spine object, so we end the batch
113+
batcher.isDrawing = true;
114+
115+
batcher.end();
97116

98-
shader.unbind();
117+
shader.unbind();
99118

100-
if (plugin.drawDebug || src.drawDebug)
119+
renderer.rebindPipeline(renderer.pipelines.TextureTintPipeline);
120+
}
121+
122+
/*
123+
var drawDebug = (plugin.drawDebug || src.drawDebug);
124+
125+
if (drawDebug)
101126
{
102127
var debugShader = plugin.debugShader;
103128
var debugRenderer = plugin.debugRenderer;
104129
var shapes = plugin.shapes;
105130
106131
debugShader.bind();
107-
debugShader.setUniform4x4f(runtime.webgl.Shader.MVP_MATRIX, mvp.val);
132+
debugShader.setUniform4x4f(runtime.Shader.MVP_MATRIX, mvp.val);
108133
109134
shapes.begin(debugShader);
110135
@@ -114,8 +139,7 @@ var SpineGameObjectWebGLRenderer = function (renderer, src, interpolationPercent
114139
115140
debugShader.unbind();
116141
}
117-
118-
renderer.rebindPipeline(pipeline);
142+
*/
119143
};
120144

121145
module.exports = SpineGameObjectWebGLRenderer;

0 commit comments

Comments
 (0)