UNPKG

oxygen-core

Version:

Oxygen game engine (Xenon Core for browsers)

664 lines (559 loc) 32.2 kB
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <base data-ice="baseUrl" href="../../../"> <title data-ice="title">src/components/VerticesRenderer.js | oxygen-core</title> <link type="text/css" rel="stylesheet" href="css/style.css"> <link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css"> <script src="script/prettify/prettify.js"></script> <script src="script/manual.js"></script> <meta name="description" content="Oxygen game engine (Xenon Core for browsers)"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="oxygen-core"><meta property="twitter:description" content="Oxygen game engine (Xenon Core for browsers)"></head> <body class="layout-container" data-ice="rootContainer"> <header> <a href="./">Home</a> <a href="identifiers.html">Reference</a> <a href="source.html">Source</a> <div class="search-box"> <span> <img src="./image/search.png"> <span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span> </span> <ul class="search-result"></ul> </div> <a style="position:relative; top:3px;" href="https://github.com/PsichiX/Oxygen"><img width="20px" src="./image/github.png"></a></header> <nav class="navigation" data-ice="nav"><div> <ul> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/index.js~EventsController.html">EventsController</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-lazyInitialization">lazyInitialization</a></span></span></li> <li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#asset-loaders">asset-loaders</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/AssemblyAsset.js~AssemblyAsset.html">AssemblyAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/AtlasAsset.js~AtlasAsset.html">AtlasAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/BinaryAsset.js~BinaryAsset.html">BinaryAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/FontAsset.js~FontAsset.html">FontAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/ImageAsset.js~ImageAsset.html">ImageAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/JSONAsset.js~JSONAsset.html">JSONAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/MusicAsset.js~MusicAsset.html">MusicAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/PackAsset.js~PackAsset.html">PackAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/ParticleSystemAsset.js~ParticleSystemAsset.html">ParticleSystemAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/PostprocessRackEffectAsset.js~PostprocessRackEffectAsset.html">PostprocessRackEffectAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/SVGAsset.js~SVGAsset.html">SVGAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/SceneAsset.js~SceneAsset.html">SceneAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/SetAsset.js~SetAsset.html">SetAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/ShaderAsset.js~ShaderAsset.html">ShaderAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/SkeletonAsset.js~SkeletonAsset.html">SkeletonAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/SoundAsset.js~SoundAsset.html">SoundAsset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/asset-loaders/TextAsset.js~TextAsset.html">TextAsset</a></span></span></li> <li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#components">components</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/AtlasSprite.js~AtlasSprite.html">AtlasSprite</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/Camera.js~Camera.html">Camera</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/Camera.js~PostprocessPass.html">PostprocessPass</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/Camera2D.js~Camera2D.html">Camera2D</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/CameraDirector2D.js~CameraDirector2D.html">CameraDirector2D</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/CircleShape.js~CircleShape.html">CircleShape</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/Container.js~Container.html">Container</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/DeferredRenderer.js~DeferredPipeline.html">DeferredPipeline</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/DeferredRenderer.js~DeferredRenderer.html">DeferredRenderer</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/GestureListener.js~GestureListener.html">GestureListener</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/InputHandler.js~InputHandler.html">InputHandler</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/MultipassRenderer.js~MultipassPipeline.html">MultipassPipeline</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/MultipassRenderer.js~MultipassRenderer.html">MultipassRenderer</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/Particles.js~Particles.html">Particles</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/PhysicsBody.js~PhysicsBody.html">PhysicsBody</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/PhysicsWorld.js~PhysicsWorld.html">PhysicsWorld</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/PolygonShape.js~PolygonShape.html">PolygonShape</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/PostprocessRack.js~PostprocessRack.html">PostprocessRack</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/PostprocessRack.js~PostprocessRackPass.html">PostprocessRackPass</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/PostprocessRack.js~PostprocessRackRawEffectPass.html">PostprocessRackRawEffectPass</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/PrefabInstance.js~PrefabInstance.html">PrefabInstance</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/RectangleRenderer.js~RectangleRenderer.html">RectangleRenderer</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/RectangleShape.js~RectangleShape.html">RectangleShape</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/Script.js~Script.html">Script</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/Shape.js~Shape.html">Shape</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/Skeleton.js~Skeleton.html">Skeleton</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/SortedActions.js~SortedActions.html">SortedActions</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/Sprite.js~Sprite.html">Sprite</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/TextRenderer.js~TextRenderer.html">TextRenderer</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/UiLayout.js~UiLayout.html">UiLayout</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/UiSprite.js~UiSprite.html">UiSprite</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/components/VerticesRenderer.js~VerticesRenderer.html">VerticesRenderer</a></span></span></li> <li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#systems">systems</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/AssemblySystem.js~AssemblySystem.html">AssemblySystem</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/AudioSystem.js~AudioSystem.html">AudioSystem</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/InputSystem.js~InputSystem.html">InputSystem</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/RenderSystem.js~Command.html">Command</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/RenderSystem.js~Pipeline.html">Pipeline</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/RenderSystem.js~RenderFullscreenCommand.html">RenderFullscreenCommand</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/RenderSystem.js~RenderSystem.html">RenderSystem</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/RenderSystem.js~RenderTargetWrapper.html">RenderTargetWrapper</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/StorageSystem.js~StorageSystem.html">StorageSystem</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/System.js~System.html">System</a></span></span></li> <li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#systems-assetsystem">systems/AssetSystem</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/AssetSystem/Asset.js~Asset.html">Asset</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/AssetSystem/index.js~AssetSystem.html">AssetSystem</a></span></span></li> <li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#systems-entitysystem">systems/EntitySystem</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/EntitySystem/Component.js~Component.html">Component</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/EntitySystem/Entity.js~Entity.html">Entity</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/systems/EntitySystem/index.js~EntitySystem.html">EntitySystem</a></span></span></li> <li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#utils">utils</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/utils/Events.js~Events.html">Events</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-angleDifference">angleDifference</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-bezierCubic">bezierCubic</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-convertGlobalPointToLocalPoint">convertGlobalPointToLocalPoint</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-convertLocalPointToGlobalPoint">convertLocalPointToGlobalPoint</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-findMapKeyOfValue">findMapKeyOfValue</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-getMipmapScale">getMipmapScale</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-getPOT">getPOT</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-isGlobalPointInGlobalBoundingBox">isGlobalPointInGlobalBoundingBox</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-isLocalPointInLocalBoundingBox">isLocalPointInLocalBoundingBox</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-isPOT">isPOT</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-propsEnumStringify">propsEnumStringify</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-stringToRGBA">stringToRGBA</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-waitForSeconds">waitForSeconds</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-Box2D">Box2D</a></span></span></li> </ul> </div> </nav> <div class="content" data-ice="content"><h1 data-ice="title">src/components/VerticesRenderer.js</h1> <pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import Component from &apos;../systems/EntitySystem/Component&apos;; import { mat4 } from &apos;../utils/gl-matrix&apos;; const RenderMode = { TRIANGLES: &apos;triangles&apos;, LINES: &apos;lines&apos;, POINTS: &apos;points&apos; }; const BufferUsage = { STATIC: &apos;static&apos;, DYNAMIC: &apos;dynamic&apos;, STREAM: &apos;stream&apos; } const DirtyMode = { NONE: 0, SUB: 1, ALL: 2 }; export default class VerticesRenderer extends Component { static factory() { return new VerticesRenderer(); } static get propsTypes() { return { visible: &apos;boolean&apos;, shader: &apos;asset(shader)&apos;, vertices: &apos;array(number)&apos;, indices: &apos;array(integer)&apos;, verticesUsage: &apos;enum(static, dynamic, stream)&apos;, indicesUsage: &apos;enum(static, dynamic, stream)&apos;, overrideUniforms: &apos;uniforms&apos;, overrideSamplers: &apos;samplers&apos;, renderMode: &apos;enum(triangles, lines, points)&apos;, layers: &apos;array(string)&apos; }; } static get RenderMode() { return RenderMode; } static get BufferUsage() { return BufferUsage; } get visible() { return this._visible; } set visible(value) { if (typeof value !== &apos;boolean&apos;) { throw new Error(&apos;`value` is not type of Boolean!&apos;); } this._visible = value; } get shader() { return this._shader; } set shader(value) { if (typeof value !== &apos;string&apos;) { throw new Error(&apos;`value` is not type of String!&apos;); } this._shader = value; } get vertices() { return this._vertices; } set vertices(value) { if (!value) { throw new Error(&apos;`value` cannot be null!&apos;); } if (value instanceof Array) { value = new Float32Array(value); } if (!(value instanceof Float32Array)) { throw new Error(&apos;`value` is not type of either Array or Float32Array!&apos;); } const { _vertices } = this; this._dirty = true; if (this._dirtyMode !== DirtyMode.ALL) { this._dirtyMode = !_vertices || _vertices.length != value.length ? DirtyMode.ALL : DirtyMode.SUB; } this._vertices = value; } get indices() { return this._indices; } set indices(value) { if (!value) { throw new Error(&apos;`value` cannot be null!&apos;); } if (value instanceof Array) { value = new Uint16Array(value); } if (!(value instanceof Uint16Array)) { throw new Error(&apos;`value` is not type of either Array or Uint16Array!&apos;); } const { _indices } = this; this._dirty = true; if (this._dirtyMode !== DirtyMode.ALL) { this._dirtyMode = !_indices || _indices.length != value.length ? DirtyMode.ALL : DirtyMode.SUB; } this._indices = value; } get verticesUsage() { return this._verticesUsage; } set verticesUsage(value) { if (typeof value !== &apos;string&apos;) { throw new Error(&apos;`value` is not type of String!&apos;); } this._dirty = true; this._dirtyMode = DirtyMode.ALL; this._verticesUsage = value; } get indicesUsage() { return this._indicesUsage; } set indicesUsage(value) { if (typeof value !== &apos;string&apos;) { throw new Error(&apos;`value` is not type of String!&apos;); } this._dirty = true; this._dirtyMode = DirtyMode.ALL; this._indicesUsage = value; } get overrideUniforms() { const result = {}; for (const [key, value] of this._overrideUniforms) { result[key] = value; } return result; } set overrideUniforms(value) { const { _overrideUniforms } = this; _overrideUniforms.clear(); if (!value) { return; } for (const name in value) { _overrideUniforms.set(name, value[name]); } } get overrideSamplers() { const result = {}; for (const [key, value] of this._overrideSamplers) { result[key] = value; } return result; } set overrideSamplers(value) { const { _overrideSamplers } = this; _overrideSamplers.clear(); if (!value) { return; } for (const name in value) { _overrideSamplers.set(name, value[name]); } } get renderMode() { return this._renderMode; } set renderMode(value) { if (typeof value !== &apos;string&apos;) { throw new Error(&apos;`value` is not type of String!&apos;); } this._renderMode = value; } get layers() { return [ ...this._layers ]; } set layers(value) { if (!value) { this._layers = null; return; } if (!(value instanceof Array)) { throw new Error(&apos;`value` is not type of Array!&apos;); } for (let i = 0, c = value.length; i &lt; c; ++i) { if (typeof value[i] !== &apos;string&apos;) { throw new Error(`\`value\` item #${i} is not type of String!`); } } this._layers = [ ...value ]; } constructor() { super(); this._visible = true; this._context = null; this._vertexBuffer = null; this._indexBuffer = null; this._shader = null; this._vertices = null; this._indices = null; this._verticesUsage = BufferUsage.STATIC; this._indicesUsage = BufferUsage.STATIC; this._overrideUniforms = new Map(); this._overrideSamplers = new Map(); this._renderMode = RenderMode.TRIANGLES; this._layers = null; this._verticesChunksToUpdate = []; this._indicesChunksToUpdate = []; this._dirty = true; this._dirtyMode = DirtyMode.ALL; } dispose() { const { _context, _vertexBuffer, _indexBuffer } = this; if (!!_context) { if (!!_vertexBuffer) { _context.deleteBuffer(_vertexBuffer); } if (!!_indexBuffer) { _context.deleteBuffer(_indexBuffer); } } this._overrideUniforms.clear(); this._overrideSamplers.clear(); this._context = null; this._vertexBuffer = null; this._indexBuffer = null; this._shader = null; this._vertices = null; this._indices = null; this._overrideUniforms = null; this._overrideSamplers = null; this._renderMode = null; this._layers = null; this._verticesChunksToUpdate = null; this._indicesChunksToUpdate = null; } updateVerticesChunk(data, offset, size = 0) { if (!data) { throw new Error(&apos;`data` cannot be null!&apos;); } const { _vertices } = this; if (!_vertices) { throw new Error(&apos;Cannot update non-existing vertices!&apos;); } if (data instanceof Array || data instanceof Float32Array) { if (offset &lt; 0 || offset + data.length &gt; _vertices.length) { throw new Error(&apos;Trying to update chunk exceeding vertices bounds!&apos;); } _vertices.set(data, offset); this._verticesChunksToUpdate.push(offset, data.length); } else { throw new Error(&apos;`data` is not type of either Array or Float32Array!&apos;); } } updateIndicesChunk(data, offset, size = 0) { if (!data) { throw new Error(&apos;`data` cannot be null!&apos;); } const { _indices } = this; if (!_indices) { throw new Error(&apos;Cannot update non-existing indices!&apos;); } if (data instanceof Array || data instanceof Uint16Array) { if (offset &lt; 0 || offset + data.length &gt; _indices.length) { throw new Error(&apos;Trying to update chunk exceeding indices bounds!&apos;); } _indices.set(data, offset); this._indicesChunksToUpdate.push(offset, data.length); } else { throw new Error(&apos;`data` is not type of either Array or Float32Array!&apos;); } } reuploadData() { this._dirty = true; if (this._dirtyMode !== DirtyMode.ALL) { this._dirtyMode = DirtyMode.SUB; } } onAction(name, ...args) { if (name === &apos;render&apos;) { return this.onRender(...args); } else if (name === &apos;render-layer&apos;) { return this.onRenderLayer(...args); } else if (name === &apos;preview&apos;) { return this.onPreview(...args); } } onPropertySerialize(name, value) { if (name === &apos;vertices&apos; || name === &apos;indices&apos;) { if (!value) { return; } return [ ...value ]; } else if (name === &apos;overrideUniforms&apos; || name === &apos;overrideSamplers&apos;) { if (value.size === 0) { return; } const result = {}; for (const [key, value] of value.entries()) { result[key] = value; } return result; } else if (name === &apos;layers&apos;) { return !value ? [] : [ ...value ]; } else { return super.onPropertySerialize(name, value); } } onRender(gl, renderer, deltaTime, layer) { const { _visible, _shader, _vertices, _indices, _verticesUsage, _indicesUsage, _overrideUniforms, _overrideSamplers, _renderMode, _verticesChunksToUpdate, _indicesChunksToUpdate } = this; if (!_visible || !_renderMode) { return; } if (!_shader) { console.warn(&apos;Trying to render VerticesRenderer without shader!&apos;); return; } if (!_vertices || _vertices.length &lt;= 0) { console.warn(&apos;Trying to render VerticesRenderer without vertices!&apos;); return; } if (!_indices || _indices.length &lt;= 0) { console.warn(&apos;Trying to render VerticesRenderer without indices!&apos;); return; } this._ensureState(gl); mat4.copy(renderer.modelMatrix, this.entity.transform); gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer); if (this._dirty) { this._dirty = false; this._verticesChunksToUpdate = []; this._indicesChunksToUpdate = []; if (this._dirtyMode === DirtyMode.ALL) { let verticesUsage = gl.STATIC_DRAW; if (_verticesUsage === BufferUsage.DYNAMIC) { verticesUsage = gl.DYNAMIC_DRAW; } else if (_verticesUsage === BufferUsage.STREAM) { verticesUsage = gl.STREAM_DRAW; } let indicesUsage = gl.STATIC_DRAW; if (_indicesUsage === BufferUsage.DYNAMIC) { indicesUsage = gl.DYNAMIC_DRAW; } else if (_indicesUsage === BufferUsage.STREAM) { indicesUsage = gl.STREAM_DRAW; } gl.bufferData(gl.ARRAY_BUFFER, _vertices, verticesUsage); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, _indices, indicesUsage); } else if (this._dirtyMode === DirtyMode.SUB) { gl.bufferSubData(gl.ARRAY_BUFFER, 0, _vertices); gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, 0, _indices); } this._dirtyMode = DirtyMode.NONE; } if (_verticesChunksToUpdate.length &gt; 0) { for (let i = 0, c = _verticesChunksToUpdate.length; i &lt; c; i += 2) { gl.bufferSubData( gl.ARRAY_BUFFER, _verticesChunksToUpdate[i], _vertices.subarray( _verticesChunksToUpdate[i], _verticesChunksToUpdate[i + 1] ) ); } this._verticesChunksToUpdate = []; } if (_indicesChunksToUpdate.length &gt; 0) { for (let i = 0, c = _indicesChunksToUpdate.length; i &lt; c; i += 2) { gl.bufferSubData( gl.ELEMENT_ARRAY_BUFFER, _indicesChunksToUpdate[i], _indices.subarray( _indicesChunksToUpdate[i], _indicesChunksToUpdate[i + 1] ) ); } this._indicesChunksToUpdate = []; } renderer.enableShader(_shader); if (_overrideUniforms.size &gt; 0) { for (const [ name, value ] of _overrideUniforms) { renderer.overrideShaderUniform(name, value); } } if (_overrideSamplers.size &gt; 0) { for (const [ name, { texture, filtering } ] of _overrideSamplers) { renderer.overrideShaderSampler(name, texture, filtering); } } gl.drawElements( gl[_renderMode.toUpperCase()], _indices.length, gl.UNSIGNED_SHORT, 0 ); renderer.disableShader(); } onRenderLayer(gl, renderer, deltaTime, layer) { const { _layers } = this; if (!!layer &amp;&amp; !!_layers &amp;&amp; _layers.length &gt; 0 &amp;&amp; _layers.indexOf(layer) &lt; 0 ) { return; } this.onRender(gl, renderer, deltaTime, layer); } onPreview(gl, renderer, deltaTime) { this.onRender(gl, renderer, deltaTime, null); } _ensureState(gl) { this._context = gl; if (!this._vertexBuffer) { this._vertexBuffer = gl.createBuffer(); this._dirty = true; this._dirtyMode = DirtyMode.ALL; } if (!this._indexBuffer) { this._indexBuffer = gl.createBuffer(); this._dirty = true; this._dirtyMode = DirtyMode.ALL; } } } </code></pre> </div> <footer class="footer"> Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a> </footer> <script src="script/search_index.js"></script> <script src="script/search.js"></script> <script src="script/pretty-print.js"></script> <script src="script/inherited-summary.js"></script> <script src="script/test-summary.js"></script> <script src="script/inner-link.js"></script> <script src="script/patch-for-local.js"></script> </body> </html>