Initial
This commit is contained in:
65
resources/app/client-esm/canvas/regions/geometry.mjs
Normal file
65
resources/app/client-esm/canvas/regions/geometry.mjs
Normal file
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user