diff --git a/src/mesh/Mesh.js b/src/mesh/Mesh.js index 8eaac84..7e29f46 100644 --- a/src/mesh/Mesh.js +++ b/src/mesh/Mesh.js @@ -5,19 +5,21 @@ * @class * @extends PIXI.Container * @memberof PIXI.mesh - * @param texture {PIXI.Texture} The texture to use - * @param [vertices] {Float32Array} if you want to specify the vertices - * @param [uvs] {Float32Array} if you want to specify the uvs - * @param [indices] {Uint16Array} if you want to specify the indices - * @param [drawMode] {number} the drawMode, can be any of the Mesh.DRAW_MODES consts */ export default class Mesh extends core.Container { - + /** + * @param {PIXI.mesh.Geometry} geometry the geometry the mesh will use + * @param {PIXI.Shader} shader the shader the mesh will use + * @param {number} drawMode the drawMode, can be any of the PIXI.DRAW_MODES consts + */ constructor(geometry, shader, drawMode = core.DRAW_MODES.TRIANGLES) { super(); - + /** + * the geometry the mesh will use + * @type {PIXI.mesh.Geometry} + */ this.geometry = geometry; this.shader = shader; @@ -32,12 +34,6 @@ this.blendMode = core.BLEND_MODES.NORMAL; /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles to overlap a bit with each other. - * - * @member {number} - */ - - /** * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts * * @member {number} @@ -49,7 +45,7 @@ /** * Renders the object using the WebGL renderer * - * @param renderer {PIXI.WebGLRenderer} a reference to the WebGL renderer + * @param {PIXI.WebGLRenderer} renderer a reference to the WebGL renderer * @private */ _renderWebGL(renderer) @@ -60,9 +56,6 @@ /** * Calculates the bounds of the mesh. The bounds calculation takes the worldTransform into account. - * - * @param [matrix=this.worldTransform] {PIXI.Matrix} the transformation matrix of the sprite - * @return {PIXI.Rectangle} the framing rectangle */ _calculateBounds() { diff --git a/src/mesh/Mesh.js b/src/mesh/Mesh.js index 8eaac84..7e29f46 100644 --- a/src/mesh/Mesh.js +++ b/src/mesh/Mesh.js @@ -5,19 +5,21 @@ * @class * @extends PIXI.Container * @memberof PIXI.mesh - * @param texture {PIXI.Texture} The texture to use - * @param [vertices] {Float32Array} if you want to specify the vertices - * @param [uvs] {Float32Array} if you want to specify the uvs - * @param [indices] {Uint16Array} if you want to specify the indices - * @param [drawMode] {number} the drawMode, can be any of the Mesh.DRAW_MODES consts */ export default class Mesh extends core.Container { - + /** + * @param {PIXI.mesh.Geometry} geometry the geometry the mesh will use + * @param {PIXI.Shader} shader the shader the mesh will use + * @param {number} drawMode the drawMode, can be any of the PIXI.DRAW_MODES consts + */ constructor(geometry, shader, drawMode = core.DRAW_MODES.TRIANGLES) { super(); - + /** + * the geometry the mesh will use + * @type {PIXI.mesh.Geometry} + */ this.geometry = geometry; this.shader = shader; @@ -32,12 +34,6 @@ this.blendMode = core.BLEND_MODES.NORMAL; /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles to overlap a bit with each other. - * - * @member {number} - */ - - /** * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts * * @member {number} @@ -49,7 +45,7 @@ /** * Renders the object using the WebGL renderer * - * @param renderer {PIXI.WebGLRenderer} a reference to the WebGL renderer + * @param {PIXI.WebGLRenderer} renderer a reference to the WebGL renderer * @private */ _renderWebGL(renderer) @@ -60,9 +56,6 @@ /** * Calculates the bounds of the mesh. The bounds calculation takes the worldTransform into account. - * - * @param [matrix=this.worldTransform] {PIXI.Matrix} the transformation matrix of the sprite - * @return {PIXI.Rectangle} the framing rectangle */ _calculateBounds() { diff --git a/src/mesh/Mesh_.js b/src/mesh/Mesh_.js deleted file mode 100644 index 21e5a61..0000000 --- a/src/mesh/Mesh_.js +++ /dev/null @@ -1,287 +0,0 @@ -import * as core from '../core'; - -const tempPoint = new core.Point(); -const tempPolygon = new core.Polygon(); - -/** - * Base mesh class - * @class - * @extends PIXI.Container - * @memberof PIXI.mesh - */ -export default class Mesh extends core.Container -{ - /** - * @param {PIXI.Texture} texture - The texture to use - * @param {Float32Array} [vertices] - if you want to specify the vertices - * @param {Float32Array} [uvs] - if you want to specify the uvs - * @param {Uint16Array} [indices] - if you want to specify the indices - * @param {number} [drawMode] - the drawMode, can be any of the Mesh.DRAW_MODES consts - */ - constructor(texture, vertices, uvs, indices, drawMode) - { - super(); - - /** - * The texture of the Mesh - * - * @member {PIXI.Texture} - * @private - */ - this._texture = null; - - /** - * The Uvs of the Mesh - * - * @member {Float32Array} - */ - this.uvs = uvs || new Float32Array([0, 0, - 1, 0, - 1, 1, - 0, 1]); - - /** - * An array of vertices - * - * @member {Float32Array} - */ - this.vertices = vertices || new Float32Array([0, 0, - 100, 0, - 100, 100, - 0, 100]); - - /* - * @member {Uint16Array} An array containing the indices of the vertices - */ - // TODO auto generate this based on draw mode! - this.indices = indices || new Uint16Array([0, 1, 3, 2]); - - /** - * Version of mesh uvs are dirty or not - * - * @member {number} - */ - this.dirty = 0; - - /** - * Version of mesh indices - * - * @member {number} - */ - this.indexDirty = 0; - - /** - * The blend mode to be applied to the sprite. Set to `PIXI.BLEND_MODES.NORMAL` to remove - * any blend mode. - * - * @member {number} - * @default PIXI.BLEND_MODES.NORMAL - * @see PIXI.BLEND_MODES - */ - this.blendMode = core.BLEND_MODES.NORMAL; - - /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles - * to overlap a bit with each other. - * - * @member {number} - */ - this.canvasPadding = 0; - - /** - * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts - * - * @member {number} - * @see PIXI.mesh.Mesh.DRAW_MODES - */ - this.drawMode = drawMode || Mesh.DRAW_MODES.TRIANGLE_MESH; - - // run texture setter; - this.texture = texture; - - /** - * The default shader that is used if a mesh doesn't have a more specific one. - * - * @member {PIXI.Shader} - */ - this.shader = null; - - /** - * The tint applied to the mesh. This is a [r,g,b] value. A value of [1,1,1] will remove any - * tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - */ - this.tintRgb = new Float32Array([1, 1, 1]); - - /** - * A map of renderer IDs to webgl render data - * - * @private - * @member {object} - */ - this._glDatas = {}; - } - - /** - * Renders the object using the WebGL renderer - * - * @private - * @param {PIXI.WebGLRenderer} renderer - a reference to the WebGL renderer - */ - _renderWebGL(renderer) - { - renderer.setObjectRenderer(renderer.plugins.mesh); - renderer.plugins.mesh.render(this); - } - - /** - * Renders the object using the Canvas renderer - * - * @private - * @param {PIXI.CanvasRenderer} renderer - The canvas renderer. - */ - _renderCanvas(renderer) - { - renderer.plugins.mesh.render(this); - } - - /** - * When the texture is updated, this event will fire to update the scale and frame - * - * @private - */ - _onTextureUpdate() - { - /* empty */ - } - - /** - * Returns the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account. - * - */ - _calculateBounds() - { - // TODO - we can cache local bounds and use them if they are dirty (like graphics) - this._bounds.addVertices(this.transform, this.vertices, 0, this.vertices.length); - } - - /** - * Tests if a point is inside this mesh. Works only for TRIANGLE_MESH - * - * @param {PIXI.Point} point - the point to test - * @return {boolean} the result of the test - */ - containsPoint(point) - { - if (!this.getBounds().contains(point.x, point.y)) - { - return false; - } - - this.worldTransform.applyInverse(point, tempPoint); - - const vertices = this.vertices; - const points = tempPolygon.points; - const indices = this.indices; - const len = this.indices.length; - const step = this.drawMode === Mesh.DRAW_MODES.TRIANGLES ? 3 : 1; - - for (let i = 0; i + 2 < len; i += step) - { - const ind0 = indices[i] * 2; - const ind1 = indices[i + 1] * 2; - const ind2 = indices[i + 2] * 2; - - points[0] = vertices[ind0]; - points[1] = vertices[ind0 + 1]; - points[2] = vertices[ind1]; - points[3] = vertices[ind1 + 1]; - points[4] = vertices[ind2]; - points[5] = vertices[ind2 + 1]; - - if (tempPolygon.contains(tempPoint.x, tempPoint.y)) - { - return true; - } - } - - return false; - } - - /** - * The texture that the mesh uses. - * - * @member {PIXI.Texture} - * @memberof PIXI.mesh.Mesh# - */ - get texture() - { - return this._texture; - } - - /** - * Sets the texture the mesh uses. - * - * @param {Texture} value - The value to set. - */ - set texture(value) - { - if (this._texture === value) - { - return; - } - - this._texture = value; - - if (value) - { - // wait for the texture to load - if (value.baseTexture.hasLoaded) - { - this._onTextureUpdate(); - } - else - { - value.once('update', this._onTextureUpdate, this); - } - } - } - - /** - * The tint applied to the mesh. This is a hex value. A value of 0xFFFFFF will remove any tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - * @default 0xFFFFFF - */ - get tint() - { - return core.utils.rgb2hex(this.tintRgb); - } - - /** - * Sets the tint the mesh uses. - * - * @param {number} value - The value to set. - */ - set tint(value) - { - this.tintRgb = core.utils.hex2rgb(value, this.tintRgb); - } -} - -/** - * Different drawing buffer modes supported - * - * @static - * @constant - * @type {object} - * @property {number} TRIANGLE_MESH - * @property {number} TRIANGLES - */ -Mesh.DRAW_MODES = { - TRIANGLE_MESH: 0, - TRIANGLES: 1, -}; diff --git a/src/mesh/Mesh.js b/src/mesh/Mesh.js index 8eaac84..7e29f46 100644 --- a/src/mesh/Mesh.js +++ b/src/mesh/Mesh.js @@ -5,19 +5,21 @@ * @class * @extends PIXI.Container * @memberof PIXI.mesh - * @param texture {PIXI.Texture} The texture to use - * @param [vertices] {Float32Array} if you want to specify the vertices - * @param [uvs] {Float32Array} if you want to specify the uvs - * @param [indices] {Uint16Array} if you want to specify the indices - * @param [drawMode] {number} the drawMode, can be any of the Mesh.DRAW_MODES consts */ export default class Mesh extends core.Container { - + /** + * @param {PIXI.mesh.Geometry} geometry the geometry the mesh will use + * @param {PIXI.Shader} shader the shader the mesh will use + * @param {number} drawMode the drawMode, can be any of the PIXI.DRAW_MODES consts + */ constructor(geometry, shader, drawMode = core.DRAW_MODES.TRIANGLES) { super(); - + /** + * the geometry the mesh will use + * @type {PIXI.mesh.Geometry} + */ this.geometry = geometry; this.shader = shader; @@ -32,12 +34,6 @@ this.blendMode = core.BLEND_MODES.NORMAL; /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles to overlap a bit with each other. - * - * @member {number} - */ - - /** * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts * * @member {number} @@ -49,7 +45,7 @@ /** * Renders the object using the WebGL renderer * - * @param renderer {PIXI.WebGLRenderer} a reference to the WebGL renderer + * @param {PIXI.WebGLRenderer} renderer a reference to the WebGL renderer * @private */ _renderWebGL(renderer) @@ -60,9 +56,6 @@ /** * Calculates the bounds of the mesh. The bounds calculation takes the worldTransform into account. - * - * @param [matrix=this.worldTransform] {PIXI.Matrix} the transformation matrix of the sprite - * @return {PIXI.Rectangle} the framing rectangle */ _calculateBounds() { diff --git a/src/mesh/Mesh_.js b/src/mesh/Mesh_.js deleted file mode 100644 index 21e5a61..0000000 --- a/src/mesh/Mesh_.js +++ /dev/null @@ -1,287 +0,0 @@ -import * as core from '../core'; - -const tempPoint = new core.Point(); -const tempPolygon = new core.Polygon(); - -/** - * Base mesh class - * @class - * @extends PIXI.Container - * @memberof PIXI.mesh - */ -export default class Mesh extends core.Container -{ - /** - * @param {PIXI.Texture} texture - The texture to use - * @param {Float32Array} [vertices] - if you want to specify the vertices - * @param {Float32Array} [uvs] - if you want to specify the uvs - * @param {Uint16Array} [indices] - if you want to specify the indices - * @param {number} [drawMode] - the drawMode, can be any of the Mesh.DRAW_MODES consts - */ - constructor(texture, vertices, uvs, indices, drawMode) - { - super(); - - /** - * The texture of the Mesh - * - * @member {PIXI.Texture} - * @private - */ - this._texture = null; - - /** - * The Uvs of the Mesh - * - * @member {Float32Array} - */ - this.uvs = uvs || new Float32Array([0, 0, - 1, 0, - 1, 1, - 0, 1]); - - /** - * An array of vertices - * - * @member {Float32Array} - */ - this.vertices = vertices || new Float32Array([0, 0, - 100, 0, - 100, 100, - 0, 100]); - - /* - * @member {Uint16Array} An array containing the indices of the vertices - */ - // TODO auto generate this based on draw mode! - this.indices = indices || new Uint16Array([0, 1, 3, 2]); - - /** - * Version of mesh uvs are dirty or not - * - * @member {number} - */ - this.dirty = 0; - - /** - * Version of mesh indices - * - * @member {number} - */ - this.indexDirty = 0; - - /** - * The blend mode to be applied to the sprite. Set to `PIXI.BLEND_MODES.NORMAL` to remove - * any blend mode. - * - * @member {number} - * @default PIXI.BLEND_MODES.NORMAL - * @see PIXI.BLEND_MODES - */ - this.blendMode = core.BLEND_MODES.NORMAL; - - /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles - * to overlap a bit with each other. - * - * @member {number} - */ - this.canvasPadding = 0; - - /** - * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts - * - * @member {number} - * @see PIXI.mesh.Mesh.DRAW_MODES - */ - this.drawMode = drawMode || Mesh.DRAW_MODES.TRIANGLE_MESH; - - // run texture setter; - this.texture = texture; - - /** - * The default shader that is used if a mesh doesn't have a more specific one. - * - * @member {PIXI.Shader} - */ - this.shader = null; - - /** - * The tint applied to the mesh. This is a [r,g,b] value. A value of [1,1,1] will remove any - * tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - */ - this.tintRgb = new Float32Array([1, 1, 1]); - - /** - * A map of renderer IDs to webgl render data - * - * @private - * @member {object} - */ - this._glDatas = {}; - } - - /** - * Renders the object using the WebGL renderer - * - * @private - * @param {PIXI.WebGLRenderer} renderer - a reference to the WebGL renderer - */ - _renderWebGL(renderer) - { - renderer.setObjectRenderer(renderer.plugins.mesh); - renderer.plugins.mesh.render(this); - } - - /** - * Renders the object using the Canvas renderer - * - * @private - * @param {PIXI.CanvasRenderer} renderer - The canvas renderer. - */ - _renderCanvas(renderer) - { - renderer.plugins.mesh.render(this); - } - - /** - * When the texture is updated, this event will fire to update the scale and frame - * - * @private - */ - _onTextureUpdate() - { - /* empty */ - } - - /** - * Returns the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account. - * - */ - _calculateBounds() - { - // TODO - we can cache local bounds and use them if they are dirty (like graphics) - this._bounds.addVertices(this.transform, this.vertices, 0, this.vertices.length); - } - - /** - * Tests if a point is inside this mesh. Works only for TRIANGLE_MESH - * - * @param {PIXI.Point} point - the point to test - * @return {boolean} the result of the test - */ - containsPoint(point) - { - if (!this.getBounds().contains(point.x, point.y)) - { - return false; - } - - this.worldTransform.applyInverse(point, tempPoint); - - const vertices = this.vertices; - const points = tempPolygon.points; - const indices = this.indices; - const len = this.indices.length; - const step = this.drawMode === Mesh.DRAW_MODES.TRIANGLES ? 3 : 1; - - for (let i = 0; i + 2 < len; i += step) - { - const ind0 = indices[i] * 2; - const ind1 = indices[i + 1] * 2; - const ind2 = indices[i + 2] * 2; - - points[0] = vertices[ind0]; - points[1] = vertices[ind0 + 1]; - points[2] = vertices[ind1]; - points[3] = vertices[ind1 + 1]; - points[4] = vertices[ind2]; - points[5] = vertices[ind2 + 1]; - - if (tempPolygon.contains(tempPoint.x, tempPoint.y)) - { - return true; - } - } - - return false; - } - - /** - * The texture that the mesh uses. - * - * @member {PIXI.Texture} - * @memberof PIXI.mesh.Mesh# - */ - get texture() - { - return this._texture; - } - - /** - * Sets the texture the mesh uses. - * - * @param {Texture} value - The value to set. - */ - set texture(value) - { - if (this._texture === value) - { - return; - } - - this._texture = value; - - if (value) - { - // wait for the texture to load - if (value.baseTexture.hasLoaded) - { - this._onTextureUpdate(); - } - else - { - value.once('update', this._onTextureUpdate, this); - } - } - } - - /** - * The tint applied to the mesh. This is a hex value. A value of 0xFFFFFF will remove any tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - * @default 0xFFFFFF - */ - get tint() - { - return core.utils.rgb2hex(this.tintRgb); - } - - /** - * Sets the tint the mesh uses. - * - * @param {number} value - The value to set. - */ - set tint(value) - { - this.tintRgb = core.utils.hex2rgb(value, this.tintRgb); - } -} - -/** - * Different drawing buffer modes supported - * - * @static - * @constant - * @type {object} - * @property {number} TRIANGLE_MESH - * @property {number} TRIANGLES - */ -Mesh.DRAW_MODES = { - TRIANGLE_MESH: 0, - TRIANGLES: 1, -}; diff --git a/src/mesh/geometry/Attribute.js b/src/mesh/geometry/Attribute.js index 7a0a7a5..2c6516c 100644 --- a/src/mesh/geometry/Attribute.js +++ b/src/mesh/geometry/Attribute.js @@ -1,26 +1,26 @@ class Attribute { - constructor(buffer, size = 2, stride = 0, start = 0, normalised = false) + constructor(buffer, size = 2, stride = 0, start = 0, normalised = false) { - this.buffer = buffer; - this.normalized = normalised; - this.size = size; - this.stride = stride; - this.start = start; - this.type = null; + this.buffer = buffer; + this.normalized = normalised; + this.size = size; + this.stride = stride; + this.start = start; + this.type = null; } - destroy() + destroy() { - this.buffer = null; + this.buffer = null; } } Attribute.from = function (buffer, stride, start, normalised) { - return new Attribute(buffer, stride, start, normalised); + return new Attribute(buffer, stride, start, normalised); }; module.exports = Attribute; diff --git a/src/mesh/Mesh.js b/src/mesh/Mesh.js index 8eaac84..7e29f46 100644 --- a/src/mesh/Mesh.js +++ b/src/mesh/Mesh.js @@ -5,19 +5,21 @@ * @class * @extends PIXI.Container * @memberof PIXI.mesh - * @param texture {PIXI.Texture} The texture to use - * @param [vertices] {Float32Array} if you want to specify the vertices - * @param [uvs] {Float32Array} if you want to specify the uvs - * @param [indices] {Uint16Array} if you want to specify the indices - * @param [drawMode] {number} the drawMode, can be any of the Mesh.DRAW_MODES consts */ export default class Mesh extends core.Container { - + /** + * @param {PIXI.mesh.Geometry} geometry the geometry the mesh will use + * @param {PIXI.Shader} shader the shader the mesh will use + * @param {number} drawMode the drawMode, can be any of the PIXI.DRAW_MODES consts + */ constructor(geometry, shader, drawMode = core.DRAW_MODES.TRIANGLES) { super(); - + /** + * the geometry the mesh will use + * @type {PIXI.mesh.Geometry} + */ this.geometry = geometry; this.shader = shader; @@ -32,12 +34,6 @@ this.blendMode = core.BLEND_MODES.NORMAL; /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles to overlap a bit with each other. - * - * @member {number} - */ - - /** * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts * * @member {number} @@ -49,7 +45,7 @@ /** * Renders the object using the WebGL renderer * - * @param renderer {PIXI.WebGLRenderer} a reference to the WebGL renderer + * @param {PIXI.WebGLRenderer} renderer a reference to the WebGL renderer * @private */ _renderWebGL(renderer) @@ -60,9 +56,6 @@ /** * Calculates the bounds of the mesh. The bounds calculation takes the worldTransform into account. - * - * @param [matrix=this.worldTransform] {PIXI.Matrix} the transformation matrix of the sprite - * @return {PIXI.Rectangle} the framing rectangle */ _calculateBounds() { diff --git a/src/mesh/Mesh_.js b/src/mesh/Mesh_.js deleted file mode 100644 index 21e5a61..0000000 --- a/src/mesh/Mesh_.js +++ /dev/null @@ -1,287 +0,0 @@ -import * as core from '../core'; - -const tempPoint = new core.Point(); -const tempPolygon = new core.Polygon(); - -/** - * Base mesh class - * @class - * @extends PIXI.Container - * @memberof PIXI.mesh - */ -export default class Mesh extends core.Container -{ - /** - * @param {PIXI.Texture} texture - The texture to use - * @param {Float32Array} [vertices] - if you want to specify the vertices - * @param {Float32Array} [uvs] - if you want to specify the uvs - * @param {Uint16Array} [indices] - if you want to specify the indices - * @param {number} [drawMode] - the drawMode, can be any of the Mesh.DRAW_MODES consts - */ - constructor(texture, vertices, uvs, indices, drawMode) - { - super(); - - /** - * The texture of the Mesh - * - * @member {PIXI.Texture} - * @private - */ - this._texture = null; - - /** - * The Uvs of the Mesh - * - * @member {Float32Array} - */ - this.uvs = uvs || new Float32Array([0, 0, - 1, 0, - 1, 1, - 0, 1]); - - /** - * An array of vertices - * - * @member {Float32Array} - */ - this.vertices = vertices || new Float32Array([0, 0, - 100, 0, - 100, 100, - 0, 100]); - - /* - * @member {Uint16Array} An array containing the indices of the vertices - */ - // TODO auto generate this based on draw mode! - this.indices = indices || new Uint16Array([0, 1, 3, 2]); - - /** - * Version of mesh uvs are dirty or not - * - * @member {number} - */ - this.dirty = 0; - - /** - * Version of mesh indices - * - * @member {number} - */ - this.indexDirty = 0; - - /** - * The blend mode to be applied to the sprite. Set to `PIXI.BLEND_MODES.NORMAL` to remove - * any blend mode. - * - * @member {number} - * @default PIXI.BLEND_MODES.NORMAL - * @see PIXI.BLEND_MODES - */ - this.blendMode = core.BLEND_MODES.NORMAL; - - /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles - * to overlap a bit with each other. - * - * @member {number} - */ - this.canvasPadding = 0; - - /** - * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts - * - * @member {number} - * @see PIXI.mesh.Mesh.DRAW_MODES - */ - this.drawMode = drawMode || Mesh.DRAW_MODES.TRIANGLE_MESH; - - // run texture setter; - this.texture = texture; - - /** - * The default shader that is used if a mesh doesn't have a more specific one. - * - * @member {PIXI.Shader} - */ - this.shader = null; - - /** - * The tint applied to the mesh. This is a [r,g,b] value. A value of [1,1,1] will remove any - * tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - */ - this.tintRgb = new Float32Array([1, 1, 1]); - - /** - * A map of renderer IDs to webgl render data - * - * @private - * @member {object} - */ - this._glDatas = {}; - } - - /** - * Renders the object using the WebGL renderer - * - * @private - * @param {PIXI.WebGLRenderer} renderer - a reference to the WebGL renderer - */ - _renderWebGL(renderer) - { - renderer.setObjectRenderer(renderer.plugins.mesh); - renderer.plugins.mesh.render(this); - } - - /** - * Renders the object using the Canvas renderer - * - * @private - * @param {PIXI.CanvasRenderer} renderer - The canvas renderer. - */ - _renderCanvas(renderer) - { - renderer.plugins.mesh.render(this); - } - - /** - * When the texture is updated, this event will fire to update the scale and frame - * - * @private - */ - _onTextureUpdate() - { - /* empty */ - } - - /** - * Returns the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account. - * - */ - _calculateBounds() - { - // TODO - we can cache local bounds and use them if they are dirty (like graphics) - this._bounds.addVertices(this.transform, this.vertices, 0, this.vertices.length); - } - - /** - * Tests if a point is inside this mesh. Works only for TRIANGLE_MESH - * - * @param {PIXI.Point} point - the point to test - * @return {boolean} the result of the test - */ - containsPoint(point) - { - if (!this.getBounds().contains(point.x, point.y)) - { - return false; - } - - this.worldTransform.applyInverse(point, tempPoint); - - const vertices = this.vertices; - const points = tempPolygon.points; - const indices = this.indices; - const len = this.indices.length; - const step = this.drawMode === Mesh.DRAW_MODES.TRIANGLES ? 3 : 1; - - for (let i = 0; i + 2 < len; i += step) - { - const ind0 = indices[i] * 2; - const ind1 = indices[i + 1] * 2; - const ind2 = indices[i + 2] * 2; - - points[0] = vertices[ind0]; - points[1] = vertices[ind0 + 1]; - points[2] = vertices[ind1]; - points[3] = vertices[ind1 + 1]; - points[4] = vertices[ind2]; - points[5] = vertices[ind2 + 1]; - - if (tempPolygon.contains(tempPoint.x, tempPoint.y)) - { - return true; - } - } - - return false; - } - - /** - * The texture that the mesh uses. - * - * @member {PIXI.Texture} - * @memberof PIXI.mesh.Mesh# - */ - get texture() - { - return this._texture; - } - - /** - * Sets the texture the mesh uses. - * - * @param {Texture} value - The value to set. - */ - set texture(value) - { - if (this._texture === value) - { - return; - } - - this._texture = value; - - if (value) - { - // wait for the texture to load - if (value.baseTexture.hasLoaded) - { - this._onTextureUpdate(); - } - else - { - value.once('update', this._onTextureUpdate, this); - } - } - } - - /** - * The tint applied to the mesh. This is a hex value. A value of 0xFFFFFF will remove any tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - * @default 0xFFFFFF - */ - get tint() - { - return core.utils.rgb2hex(this.tintRgb); - } - - /** - * Sets the tint the mesh uses. - * - * @param {number} value - The value to set. - */ - set tint(value) - { - this.tintRgb = core.utils.hex2rgb(value, this.tintRgb); - } -} - -/** - * Different drawing buffer modes supported - * - * @static - * @constant - * @type {object} - * @property {number} TRIANGLE_MESH - * @property {number} TRIANGLES - */ -Mesh.DRAW_MODES = { - TRIANGLE_MESH: 0, - TRIANGLES: 1, -}; diff --git a/src/mesh/geometry/Attribute.js b/src/mesh/geometry/Attribute.js index 7a0a7a5..2c6516c 100644 --- a/src/mesh/geometry/Attribute.js +++ b/src/mesh/geometry/Attribute.js @@ -1,26 +1,26 @@ class Attribute { - constructor(buffer, size = 2, stride = 0, start = 0, normalised = false) + constructor(buffer, size = 2, stride = 0, start = 0, normalised = false) { - this.buffer = buffer; - this.normalized = normalised; - this.size = size; - this.stride = stride; - this.start = start; - this.type = null; + this.buffer = buffer; + this.normalized = normalised; + this.size = size; + this.stride = stride; + this.start = start; + this.type = null; } - destroy() + destroy() { - this.buffer = null; + this.buffer = null; } } Attribute.from = function (buffer, stride, start, normalised) { - return new Attribute(buffer, stride, start, normalised); + return new Attribute(buffer, stride, start, normalised); }; module.exports = Attribute; diff --git a/src/mesh/geometry/Geometry.js b/src/mesh/geometry/Geometry.js index d734691..3b9de66 100644 --- a/src/mesh/geometry/Geometry.js +++ b/src/mesh/geometry/Geometry.js @@ -10,9 +10,8 @@ this.style = style || new GeometryStyle(); this.data = data || new GeometryData(); - // / this.indexBuffer = null; - this.glVertexArrayObjects = []; + } addAttribute(id, buffer, size = 2, stride = 0, start = 0, normalised = false) @@ -32,6 +31,7 @@ destroy() { + //TODO - this is wrong! for (let i = 0; i < this.buffers.length; i++) { this.buffers[i].destroy(); diff --git a/src/mesh/Mesh.js b/src/mesh/Mesh.js index 8eaac84..7e29f46 100644 --- a/src/mesh/Mesh.js +++ b/src/mesh/Mesh.js @@ -5,19 +5,21 @@ * @class * @extends PIXI.Container * @memberof PIXI.mesh - * @param texture {PIXI.Texture} The texture to use - * @param [vertices] {Float32Array} if you want to specify the vertices - * @param [uvs] {Float32Array} if you want to specify the uvs - * @param [indices] {Uint16Array} if you want to specify the indices - * @param [drawMode] {number} the drawMode, can be any of the Mesh.DRAW_MODES consts */ export default class Mesh extends core.Container { - + /** + * @param {PIXI.mesh.Geometry} geometry the geometry the mesh will use + * @param {PIXI.Shader} shader the shader the mesh will use + * @param {number} drawMode the drawMode, can be any of the PIXI.DRAW_MODES consts + */ constructor(geometry, shader, drawMode = core.DRAW_MODES.TRIANGLES) { super(); - + /** + * the geometry the mesh will use + * @type {PIXI.mesh.Geometry} + */ this.geometry = geometry; this.shader = shader; @@ -32,12 +34,6 @@ this.blendMode = core.BLEND_MODES.NORMAL; /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles to overlap a bit with each other. - * - * @member {number} - */ - - /** * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts * * @member {number} @@ -49,7 +45,7 @@ /** * Renders the object using the WebGL renderer * - * @param renderer {PIXI.WebGLRenderer} a reference to the WebGL renderer + * @param {PIXI.WebGLRenderer} renderer a reference to the WebGL renderer * @private */ _renderWebGL(renderer) @@ -60,9 +56,6 @@ /** * Calculates the bounds of the mesh. The bounds calculation takes the worldTransform into account. - * - * @param [matrix=this.worldTransform] {PIXI.Matrix} the transformation matrix of the sprite - * @return {PIXI.Rectangle} the framing rectangle */ _calculateBounds() { diff --git a/src/mesh/Mesh_.js b/src/mesh/Mesh_.js deleted file mode 100644 index 21e5a61..0000000 --- a/src/mesh/Mesh_.js +++ /dev/null @@ -1,287 +0,0 @@ -import * as core from '../core'; - -const tempPoint = new core.Point(); -const tempPolygon = new core.Polygon(); - -/** - * Base mesh class - * @class - * @extends PIXI.Container - * @memberof PIXI.mesh - */ -export default class Mesh extends core.Container -{ - /** - * @param {PIXI.Texture} texture - The texture to use - * @param {Float32Array} [vertices] - if you want to specify the vertices - * @param {Float32Array} [uvs] - if you want to specify the uvs - * @param {Uint16Array} [indices] - if you want to specify the indices - * @param {number} [drawMode] - the drawMode, can be any of the Mesh.DRAW_MODES consts - */ - constructor(texture, vertices, uvs, indices, drawMode) - { - super(); - - /** - * The texture of the Mesh - * - * @member {PIXI.Texture} - * @private - */ - this._texture = null; - - /** - * The Uvs of the Mesh - * - * @member {Float32Array} - */ - this.uvs = uvs || new Float32Array([0, 0, - 1, 0, - 1, 1, - 0, 1]); - - /** - * An array of vertices - * - * @member {Float32Array} - */ - this.vertices = vertices || new Float32Array([0, 0, - 100, 0, - 100, 100, - 0, 100]); - - /* - * @member {Uint16Array} An array containing the indices of the vertices - */ - // TODO auto generate this based on draw mode! - this.indices = indices || new Uint16Array([0, 1, 3, 2]); - - /** - * Version of mesh uvs are dirty or not - * - * @member {number} - */ - this.dirty = 0; - - /** - * Version of mesh indices - * - * @member {number} - */ - this.indexDirty = 0; - - /** - * The blend mode to be applied to the sprite. Set to `PIXI.BLEND_MODES.NORMAL` to remove - * any blend mode. - * - * @member {number} - * @default PIXI.BLEND_MODES.NORMAL - * @see PIXI.BLEND_MODES - */ - this.blendMode = core.BLEND_MODES.NORMAL; - - /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles - * to overlap a bit with each other. - * - * @member {number} - */ - this.canvasPadding = 0; - - /** - * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts - * - * @member {number} - * @see PIXI.mesh.Mesh.DRAW_MODES - */ - this.drawMode = drawMode || Mesh.DRAW_MODES.TRIANGLE_MESH; - - // run texture setter; - this.texture = texture; - - /** - * The default shader that is used if a mesh doesn't have a more specific one. - * - * @member {PIXI.Shader} - */ - this.shader = null; - - /** - * The tint applied to the mesh. This is a [r,g,b] value. A value of [1,1,1] will remove any - * tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - */ - this.tintRgb = new Float32Array([1, 1, 1]); - - /** - * A map of renderer IDs to webgl render data - * - * @private - * @member {object} - */ - this._glDatas = {}; - } - - /** - * Renders the object using the WebGL renderer - * - * @private - * @param {PIXI.WebGLRenderer} renderer - a reference to the WebGL renderer - */ - _renderWebGL(renderer) - { - renderer.setObjectRenderer(renderer.plugins.mesh); - renderer.plugins.mesh.render(this); - } - - /** - * Renders the object using the Canvas renderer - * - * @private - * @param {PIXI.CanvasRenderer} renderer - The canvas renderer. - */ - _renderCanvas(renderer) - { - renderer.plugins.mesh.render(this); - } - - /** - * When the texture is updated, this event will fire to update the scale and frame - * - * @private - */ - _onTextureUpdate() - { - /* empty */ - } - - /** - * Returns the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account. - * - */ - _calculateBounds() - { - // TODO - we can cache local bounds and use them if they are dirty (like graphics) - this._bounds.addVertices(this.transform, this.vertices, 0, this.vertices.length); - } - - /** - * Tests if a point is inside this mesh. Works only for TRIANGLE_MESH - * - * @param {PIXI.Point} point - the point to test - * @return {boolean} the result of the test - */ - containsPoint(point) - { - if (!this.getBounds().contains(point.x, point.y)) - { - return false; - } - - this.worldTransform.applyInverse(point, tempPoint); - - const vertices = this.vertices; - const points = tempPolygon.points; - const indices = this.indices; - const len = this.indices.length; - const step = this.drawMode === Mesh.DRAW_MODES.TRIANGLES ? 3 : 1; - - for (let i = 0; i + 2 < len; i += step) - { - const ind0 = indices[i] * 2; - const ind1 = indices[i + 1] * 2; - const ind2 = indices[i + 2] * 2; - - points[0] = vertices[ind0]; - points[1] = vertices[ind0 + 1]; - points[2] = vertices[ind1]; - points[3] = vertices[ind1 + 1]; - points[4] = vertices[ind2]; - points[5] = vertices[ind2 + 1]; - - if (tempPolygon.contains(tempPoint.x, tempPoint.y)) - { - return true; - } - } - - return false; - } - - /** - * The texture that the mesh uses. - * - * @member {PIXI.Texture} - * @memberof PIXI.mesh.Mesh# - */ - get texture() - { - return this._texture; - } - - /** - * Sets the texture the mesh uses. - * - * @param {Texture} value - The value to set. - */ - set texture(value) - { - if (this._texture === value) - { - return; - } - - this._texture = value; - - if (value) - { - // wait for the texture to load - if (value.baseTexture.hasLoaded) - { - this._onTextureUpdate(); - } - else - { - value.once('update', this._onTextureUpdate, this); - } - } - } - - /** - * The tint applied to the mesh. This is a hex value. A value of 0xFFFFFF will remove any tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - * @default 0xFFFFFF - */ - get tint() - { - return core.utils.rgb2hex(this.tintRgb); - } - - /** - * Sets the tint the mesh uses. - * - * @param {number} value - The value to set. - */ - set tint(value) - { - this.tintRgb = core.utils.hex2rgb(value, this.tintRgb); - } -} - -/** - * Different drawing buffer modes supported - * - * @static - * @constant - * @type {object} - * @property {number} TRIANGLE_MESH - * @property {number} TRIANGLES - */ -Mesh.DRAW_MODES = { - TRIANGLE_MESH: 0, - TRIANGLES: 1, -}; diff --git a/src/mesh/geometry/Attribute.js b/src/mesh/geometry/Attribute.js index 7a0a7a5..2c6516c 100644 --- a/src/mesh/geometry/Attribute.js +++ b/src/mesh/geometry/Attribute.js @@ -1,26 +1,26 @@ class Attribute { - constructor(buffer, size = 2, stride = 0, start = 0, normalised = false) + constructor(buffer, size = 2, stride = 0, start = 0, normalised = false) { - this.buffer = buffer; - this.normalized = normalised; - this.size = size; - this.stride = stride; - this.start = start; - this.type = null; + this.buffer = buffer; + this.normalized = normalised; + this.size = size; + this.stride = stride; + this.start = start; + this.type = null; } - destroy() + destroy() { - this.buffer = null; + this.buffer = null; } } Attribute.from = function (buffer, stride, start, normalised) { - return new Attribute(buffer, stride, start, normalised); + return new Attribute(buffer, stride, start, normalised); }; module.exports = Attribute; diff --git a/src/mesh/geometry/Geometry.js b/src/mesh/geometry/Geometry.js index d734691..3b9de66 100644 --- a/src/mesh/geometry/Geometry.js +++ b/src/mesh/geometry/Geometry.js @@ -10,9 +10,8 @@ this.style = style || new GeometryStyle(); this.data = data || new GeometryData(); - // / this.indexBuffer = null; - this.glVertexArrayObjects = []; + } addAttribute(id, buffer, size = 2, stride = 0, start = 0, normalised = false) @@ -32,6 +31,7 @@ destroy() { + //TODO - this is wrong! for (let i = 0; i < this.buffers.length; i++) { this.buffers[i].destroy(); diff --git a/src/mesh/index.js b/src/mesh/index.js index b5d05aa..833f39a 100644 --- a/src/mesh/index.js +++ b/src/mesh/index.js @@ -9,6 +9,6 @@ export { default as GeometryStyle } from './geometry/GeometryStyle'; export { default as Buffer } from './geometry/Buffer'; export { default as Geometry } from './geometry/Geometry'; -//export { default as Plane } from './Plane'; -//export { default as NineSlicePlane } from './NineSlicePlane'; -//export { default as Rope } from './Rope'; +// export { default as Plane } from './Plane'; +// export { default as NineSlicePlane } from './NineSlicePlane'; +// export { default as Rope } from './Rope'; diff --git a/src/mesh/Mesh.js b/src/mesh/Mesh.js index 8eaac84..7e29f46 100644 --- a/src/mesh/Mesh.js +++ b/src/mesh/Mesh.js @@ -5,19 +5,21 @@ * @class * @extends PIXI.Container * @memberof PIXI.mesh - * @param texture {PIXI.Texture} The texture to use - * @param [vertices] {Float32Array} if you want to specify the vertices - * @param [uvs] {Float32Array} if you want to specify the uvs - * @param [indices] {Uint16Array} if you want to specify the indices - * @param [drawMode] {number} the drawMode, can be any of the Mesh.DRAW_MODES consts */ export default class Mesh extends core.Container { - + /** + * @param {PIXI.mesh.Geometry} geometry the geometry the mesh will use + * @param {PIXI.Shader} shader the shader the mesh will use + * @param {number} drawMode the drawMode, can be any of the PIXI.DRAW_MODES consts + */ constructor(geometry, shader, drawMode = core.DRAW_MODES.TRIANGLES) { super(); - + /** + * the geometry the mesh will use + * @type {PIXI.mesh.Geometry} + */ this.geometry = geometry; this.shader = shader; @@ -32,12 +34,6 @@ this.blendMode = core.BLEND_MODES.NORMAL; /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles to overlap a bit with each other. - * - * @member {number} - */ - - /** * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts * * @member {number} @@ -49,7 +45,7 @@ /** * Renders the object using the WebGL renderer * - * @param renderer {PIXI.WebGLRenderer} a reference to the WebGL renderer + * @param {PIXI.WebGLRenderer} renderer a reference to the WebGL renderer * @private */ _renderWebGL(renderer) @@ -60,9 +56,6 @@ /** * Calculates the bounds of the mesh. The bounds calculation takes the worldTransform into account. - * - * @param [matrix=this.worldTransform] {PIXI.Matrix} the transformation matrix of the sprite - * @return {PIXI.Rectangle} the framing rectangle */ _calculateBounds() { diff --git a/src/mesh/Mesh_.js b/src/mesh/Mesh_.js deleted file mode 100644 index 21e5a61..0000000 --- a/src/mesh/Mesh_.js +++ /dev/null @@ -1,287 +0,0 @@ -import * as core from '../core'; - -const tempPoint = new core.Point(); -const tempPolygon = new core.Polygon(); - -/** - * Base mesh class - * @class - * @extends PIXI.Container - * @memberof PIXI.mesh - */ -export default class Mesh extends core.Container -{ - /** - * @param {PIXI.Texture} texture - The texture to use - * @param {Float32Array} [vertices] - if you want to specify the vertices - * @param {Float32Array} [uvs] - if you want to specify the uvs - * @param {Uint16Array} [indices] - if you want to specify the indices - * @param {number} [drawMode] - the drawMode, can be any of the Mesh.DRAW_MODES consts - */ - constructor(texture, vertices, uvs, indices, drawMode) - { - super(); - - /** - * The texture of the Mesh - * - * @member {PIXI.Texture} - * @private - */ - this._texture = null; - - /** - * The Uvs of the Mesh - * - * @member {Float32Array} - */ - this.uvs = uvs || new Float32Array([0, 0, - 1, 0, - 1, 1, - 0, 1]); - - /** - * An array of vertices - * - * @member {Float32Array} - */ - this.vertices = vertices || new Float32Array([0, 0, - 100, 0, - 100, 100, - 0, 100]); - - /* - * @member {Uint16Array} An array containing the indices of the vertices - */ - // TODO auto generate this based on draw mode! - this.indices = indices || new Uint16Array([0, 1, 3, 2]); - - /** - * Version of mesh uvs are dirty or not - * - * @member {number} - */ - this.dirty = 0; - - /** - * Version of mesh indices - * - * @member {number} - */ - this.indexDirty = 0; - - /** - * The blend mode to be applied to the sprite. Set to `PIXI.BLEND_MODES.NORMAL` to remove - * any blend mode. - * - * @member {number} - * @default PIXI.BLEND_MODES.NORMAL - * @see PIXI.BLEND_MODES - */ - this.blendMode = core.BLEND_MODES.NORMAL; - - /** - * Triangles in canvas mode are automatically antialiased, use this value to force triangles - * to overlap a bit with each other. - * - * @member {number} - */ - this.canvasPadding = 0; - - /** - * The way the Mesh should be drawn, can be any of the {@link PIXI.mesh.Mesh.DRAW_MODES} consts - * - * @member {number} - * @see PIXI.mesh.Mesh.DRAW_MODES - */ - this.drawMode = drawMode || Mesh.DRAW_MODES.TRIANGLE_MESH; - - // run texture setter; - this.texture = texture; - - /** - * The default shader that is used if a mesh doesn't have a more specific one. - * - * @member {PIXI.Shader} - */ - this.shader = null; - - /** - * The tint applied to the mesh. This is a [r,g,b] value. A value of [1,1,1] will remove any - * tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - */ - this.tintRgb = new Float32Array([1, 1, 1]); - - /** - * A map of renderer IDs to webgl render data - * - * @private - * @member {object} - */ - this._glDatas = {}; - } - - /** - * Renders the object using the WebGL renderer - * - * @private - * @param {PIXI.WebGLRenderer} renderer - a reference to the WebGL renderer - */ - _renderWebGL(renderer) - { - renderer.setObjectRenderer(renderer.plugins.mesh); - renderer.plugins.mesh.render(this); - } - - /** - * Renders the object using the Canvas renderer - * - * @private - * @param {PIXI.CanvasRenderer} renderer - The canvas renderer. - */ - _renderCanvas(renderer) - { - renderer.plugins.mesh.render(this); - } - - /** - * When the texture is updated, this event will fire to update the scale and frame - * - * @private - */ - _onTextureUpdate() - { - /* empty */ - } - - /** - * Returns the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account. - * - */ - _calculateBounds() - { - // TODO - we can cache local bounds and use them if they are dirty (like graphics) - this._bounds.addVertices(this.transform, this.vertices, 0, this.vertices.length); - } - - /** - * Tests if a point is inside this mesh. Works only for TRIANGLE_MESH - * - * @param {PIXI.Point} point - the point to test - * @return {boolean} the result of the test - */ - containsPoint(point) - { - if (!this.getBounds().contains(point.x, point.y)) - { - return false; - } - - this.worldTransform.applyInverse(point, tempPoint); - - const vertices = this.vertices; - const points = tempPolygon.points; - const indices = this.indices; - const len = this.indices.length; - const step = this.drawMode === Mesh.DRAW_MODES.TRIANGLES ? 3 : 1; - - for (let i = 0; i + 2 < len; i += step) - { - const ind0 = indices[i] * 2; - const ind1 = indices[i + 1] * 2; - const ind2 = indices[i + 2] * 2; - - points[0] = vertices[ind0]; - points[1] = vertices[ind0 + 1]; - points[2] = vertices[ind1]; - points[3] = vertices[ind1 + 1]; - points[4] = vertices[ind2]; - points[5] = vertices[ind2 + 1]; - - if (tempPolygon.contains(tempPoint.x, tempPoint.y)) - { - return true; - } - } - - return false; - } - - /** - * The texture that the mesh uses. - * - * @member {PIXI.Texture} - * @memberof PIXI.mesh.Mesh# - */ - get texture() - { - return this._texture; - } - - /** - * Sets the texture the mesh uses. - * - * @param {Texture} value - The value to set. - */ - set texture(value) - { - if (this._texture === value) - { - return; - } - - this._texture = value; - - if (value) - { - // wait for the texture to load - if (value.baseTexture.hasLoaded) - { - this._onTextureUpdate(); - } - else - { - value.once('update', this._onTextureUpdate, this); - } - } - } - - /** - * The tint applied to the mesh. This is a hex value. A value of 0xFFFFFF will remove any tint effect. - * - * @member {number} - * @memberof PIXI.mesh.Mesh# - * @default 0xFFFFFF - */ - get tint() - { - return core.utils.rgb2hex(this.tintRgb); - } - - /** - * Sets the tint the mesh uses. - * - * @param {number} value - The value to set. - */ - set tint(value) - { - this.tintRgb = core.utils.hex2rgb(value, this.tintRgb); - } -} - -/** - * Different drawing buffer modes supported - * - * @static - * @constant - * @type {object} - * @property {number} TRIANGLE_MESH - * @property {number} TRIANGLES - */ -Mesh.DRAW_MODES = { - TRIANGLE_MESH: 0, - TRIANGLES: 1, -}; diff --git a/src/mesh/geometry/Attribute.js b/src/mesh/geometry/Attribute.js index 7a0a7a5..2c6516c 100644 --- a/src/mesh/geometry/Attribute.js +++ b/src/mesh/geometry/Attribute.js @@ -1,26 +1,26 @@ class Attribute { - constructor(buffer, size = 2, stride = 0, start = 0, normalised = false) + constructor(buffer, size = 2, stride = 0, start = 0, normalised = false) { - this.buffer = buffer; - this.normalized = normalised; - this.size = size; - this.stride = stride; - this.start = start; - this.type = null; + this.buffer = buffer; + this.normalized = normalised; + this.size = size; + this.stride = stride; + this.start = start; + this.type = null; } - destroy() + destroy() { - this.buffer = null; + this.buffer = null; } } Attribute.from = function (buffer, stride, start, normalised) { - return new Attribute(buffer, stride, start, normalised); + return new Attribute(buffer, stride, start, normalised); }; module.exports = Attribute; diff --git a/src/mesh/geometry/Geometry.js b/src/mesh/geometry/Geometry.js index d734691..3b9de66 100644 --- a/src/mesh/geometry/Geometry.js +++ b/src/mesh/geometry/Geometry.js @@ -10,9 +10,8 @@ this.style = style || new GeometryStyle(); this.data = data || new GeometryData(); - // / this.indexBuffer = null; - this.glVertexArrayObjects = []; + } addAttribute(id, buffer, size = 2, stride = 0, start = 0, normalised = false) @@ -32,6 +31,7 @@ destroy() { + //TODO - this is wrong! for (let i = 0; i < this.buffers.length; i++) { this.buffers[i].destroy(); diff --git a/src/mesh/index.js b/src/mesh/index.js index b5d05aa..833f39a 100644 --- a/src/mesh/index.js +++ b/src/mesh/index.js @@ -9,6 +9,6 @@ export { default as GeometryStyle } from './geometry/GeometryStyle'; export { default as Buffer } from './geometry/Buffer'; export { default as Geometry } from './geometry/Geometry'; -//export { default as Plane } from './Plane'; -//export { default as NineSlicePlane } from './NineSlicePlane'; -//export { default as Rope } from './Rope'; +// export { default as Plane } from './Plane'; +// export { default as NineSlicePlane } from './NineSlicePlane'; +// export { default as Rope } from './Rope'; diff --git a/src/mesh/webgl/MeshRenderer.js b/src/mesh/webgl/MeshRenderer.js index 1ff163e..f88cd50 100644 --- a/src/mesh/webgl/MeshRenderer.js +++ b/src/mesh/webgl/MeshRenderer.js @@ -1,6 +1,5 @@ import * as core from '../../core'; import glCore from 'pixi-gl-core'; -import { default as Mesh } from '../Mesh'; /** * WebGL renderer plugin for tiling sprites @@ -28,19 +27,16 @@ { this.gl = this.renderer.gl; - //nothing to see here! + // nothing to see here! } /** * renders mesh - * + * @private * @param {PIXI.mesh.Mesh} mesh mesh instance */ render(mesh) { - // get rid of any thing that may be batching. -// renderer.flush(); - // always use shaders - rather than GLShadr // generate geometry structure from a shader :) @@ -53,11 +49,11 @@ } // set the correct blend mode - renderer.state.setBlendMode(mesh.blendMode); + this.renderer.state.setBlendMode(mesh.blendMode); // bind the shader.. // TODO rename filter to shader - renderer.bindShader(mesh.shader); + this.renderer.bindShader(mesh.shader); // now time for geometry.. @@ -65,21 +61,27 @@ this.bindGeometry(mesh.geometry); // then render it.. - mesh.geometry.glVertexArrayObjects[this.CONTEXT_UID].draw( mesh.drawMode ); + mesh.geometry.glVertexArrayObjects[this.CONTEXT_UID].draw(mesh.drawMode); } + /** + * Binds geometry so that is can be drawn. Creating a Vao if required + * @private + * @param {PIXI.mesh.Geometry} geometry instance of geometry to bind + */ bindGeometry(geometry) { const vao = geometry.glVertexArrayObjects[this.CONTEXT_UID] || this.initGeometryVao(geometry); this.renderer.bindVao(vao); + const data = geometry.data; - if (geometry.autoUpdate) + // if (geometry.autoUpdate) { // TODO - optimise later! - for (let i = 0; i < geometry.buffers.length; i++) + for (let i = 0; i < data.buffers.length; i++) { - const buffer = geometry.buffers[i]; + const buffer = data.buffers[i]; const glBuffer = buffer._glBuffers[this.CONTEXT_UID]; @@ -94,6 +96,12 @@ } } + /** + * Creates a Vao with the same structure as the geometry and stores it on the geometry + * @private + * @param {PIXI.mesh.Geometry} geometry instance of geometry to to generate Vao for + * @return {PIXI.glCore.VertexArrayObject} Returns a fresh vao. + */ initGeometryVao(geometry) { const gl = this.gl;