66 lines
1.5 KiB
JavaScript
66 lines
1.5 KiB
JavaScript
|
|
/**
|
||
|
|
* The geometry of a {@link Region}.
|
||
|
|
* - Vertex Attribute: `aVertexPosition` (`vec2`)
|
||
|
|
* - Draw Mode: `PIXI.DRAW_MODES.TRIANGLES`
|
||
|
|
*/
|
||
|
|
export default class RegionGeometry extends PIXI.Geometry {
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create a RegionGeometry.
|
||
|
|
* @param {Region} region The Region to create the RegionGeometry from.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
constructor(region) {
|
||
|
|
super();
|
||
|
|
this.#region = region;
|
||
|
|
this.addAttribute("aVertexPosition", new PIXI.Buffer(new Float32Array(), true, false), 2);
|
||
|
|
this.addIndex(new PIXI.Buffer(new Uint16Array(), true, true));
|
||
|
|
}
|
||
|
|
|
||
|
|
/* -------------------------------------------- */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* The Region this geometry belongs to.
|
||
|
|
* @type {Region}
|
||
|
|
*/
|
||
|
|
get region() {
|
||
|
|
return this.#region;
|
||
|
|
}
|
||
|
|
|
||
|
|
#region;
|
||
|
|
|
||
|
|
/* -------------------------------------------- */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Do the buffers need to be updated?
|
||
|
|
* @type {boolean}
|
||
|
|
*/
|
||
|
|
#invalidBuffers = true;
|
||
|
|
|
||
|
|
/* -------------------------------------------- */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Update the buffers.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
_clearBuffers() {
|
||
|
|
this.buffers[0].update(new Float32Array());
|
||
|
|
this.indexBuffer.update(new Uint16Array());
|
||
|
|
this.#invalidBuffers = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* -------------------------------------------- */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Update the buffers.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
_updateBuffers() {
|
||
|
|
if ( !this.#invalidBuffers ) return;
|
||
|
|
const triangulation = this.region.triangulation;
|
||
|
|
this.buffers[0].update(triangulation.vertices);
|
||
|
|
this.indexBuffer.update(triangulation.indices);
|
||
|
|
this.#invalidBuffers = false;
|
||
|
|
}
|
||
|
|
}
|