Skip to content

Commit 85daa82

Browse files
committed
Bitmap and Geometry Masking progress
1 parent 76a4e0d commit 85daa82

8 files changed

Lines changed: 890 additions & 0 deletions

File tree

v3/src/gameobjects/mask/BitmapMask.js

Whitespace-only changes.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
var Class = require('../../utils/Class');
2+
3+
var GeometryMask = new Class({
4+
5+
initialize:
6+
7+
function GeometryMask(scene, geometry)
8+
{
9+
this.geometry = geometry;
10+
this.shape = scene.create.graphics();
11+
},
12+
13+
setShape: function (geometry)
14+
{
15+
this.geometry = geometry;
16+
},
17+
18+
preRenderWebGL: function (renderer, mask, camera)
19+
{
20+
var gl = renderer.gl;
21+
22+
gl.enable(gl.STENCIL_TEST);
23+
gl.clear(gl.STENCIL_BUFFER_BIT);
24+
gl.colorMask(false, false, false, false);
25+
gl.stencilFunc(gl.NOTEQUAL, 1, 1);
26+
gl.stencilOp(gl.REPLACE, gl.REPLACE, gl.REPLACE);
27+
28+
29+
gl.colorMask(true, true, true, true);
30+
gl.stencilFunc(gl.EQUAL, 1, 1);
31+
gl.stencilOp(gl.INVERT, gl.INVERT, gl.INVERT);
32+
},
33+
34+
postRenderWebGL: function (renderer)
35+
{
36+
var gl = renderer.gl;
37+
38+
gl.disable(gl.STENCIL_TEST);
39+
}
40+
41+
});
42+
43+
44+
module.exports = GeometryMask;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
var BitmapMaskShaderRenderer = {
2+
3+
preRender: function (renderer, mask, camera)
4+
{
5+
6+
},
7+
8+
postRender: function (renderer)
9+
{
10+
11+
}
12+
13+
};
14+
15+
module.exports = BitmapMaskShaderRenderer;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var StencilBufferRenderer = {
2+
3+
preRender: function (renderer, mask, camera)
4+
{
5+
var gl = renderer.gl;
6+
7+
gl.enable(gl.STENCIL_TEST);
8+
gl.clear(gl.STENCIL_BUFFER_BIT);
9+
gl.colorMask(false, false, false, false);
10+
gl.stencilFunc(gl.NOTEQUAL, 1, 1);
11+
gl.stencilOp(gl.REPLACE, gl.REPLACE, gl.REPLACE);
12+
13+
/* Render Mask Geometry */
14+
15+
gl.colorMask(true, true, true, true);
16+
gl.stencilFunc(gl.EQUAL, 1, 1);
17+
gl.stencilOp(gl.INVERT, gl.INVERT, gl.INVERT);
18+
},
19+
20+
postRender: function (renderer)
21+
{
22+
renderer.gl.disable(gl.STENCIL_TEST);
23+
}
24+
};
25+
26+
module.exports = StencilBufferRenderer;

v3/src/renderer/webgl/WebGLRenderer.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,9 +462,19 @@ var WebGLRenderer = new Class({
462462
this.setBlendMode(child.blendMode);
463463
}
464464

465+
if (child.mask)
466+
{
467+
child.mask.preRenderWebGL(this, child.mask, camera);
468+
}
469+
465470
// drawing child
466471
child.renderWebGL(this, child, interpolationPercentage, camera);
467472

473+
if (child.mask)
474+
{
475+
child.mask.postRenderWebGL(this);
476+
}
477+
468478
renderer = this.currentRenderer;
469479

470480
if (renderer.isFull() || renderer.shouldFlush())
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
var CONST = {
2+
3+
// VERTEX_SIZE = (sizeof(vec2) * 2)
4+
VERTEX_SIZE: 8,
5+
INDEX_SIZE: 2,
6+
SPRITE_VERTEX_COUNT: 4,
7+
SPRITE_INDEX_COUNT: 6,
8+
9+
// How many 32-bit components does the vertex have.
10+
SPRITE_VERTEX_COMPONENT_COUNT: 6,
11+
12+
// Can't be bigger since index are 16-bit
13+
MAX_SPRITES: 4
14+
15+
};
16+
17+
module.exports = CONST;

0 commit comments

Comments
 (0)