@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.65 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{BufferViewVec4u8 as t}from"../../../../../geometry/support/buffer/BufferView.js";import{TextureSamplingMode as e,TextureWrapMode as i}from"../../../../webgl/enums.js";import{Texture as s}from"../../../../webgl/Texture.js";import{TextureDescriptor as r}from"../../../../webgl/TextureDescriptor.js";class h{constructor(h,a=1){this._rctx=h,this._fieldCount=a,this.textureWidth=4096,this._dirty=!0;const d=new r(this.textureWidth,1);d.samplingMode=e.NEAREST,d.wrapMode=i.CLAMP_TO_EDGE,this._texture=new s(this._rctx,d),this._data=new t(new ArrayBuffer(4*this.textureWidth))}dispose(){this._texture.dispose(),this._texture=void 0,this._data=void 0}setData(t,e,i,s,r,h){const a=t*this._fieldCount+e;this._dirty=!0,this._data.set(a,0,i),this._data.set(a,1,s),this._data.set(a,2,r),this._data.set(a,3,h)}setDataElement(t,e,i,s){const r=t*this._fieldCount+e;this._dirty=!0,this._data.set(r,i,s)}getDataElement(t,e,i){const s=t*this._fieldCount+e;return this._dirty=!0,this._data.get(s,i)}resizeToFit(e){const i=(e+1)*this._fieldCount;if(i>this._data.count){const e=Math.ceil(i/this.textureWidth)*this.textureWidth,s=new t(new ArrayBuffer(4*e));s.typedBuffer.set(this._data.typedBuffer),this._data=s}}updateTexture(){if(!this._dirty)return;const t=this._texture.descriptor.width,e=this._texture.descriptor.height;this._data.count>t*e&&this._texture.resize(t,this._data.count/t),this._texture.setData(this._data.typedBuffer),this._dirty=!1}get texture(){return this._texture}}export{h as TextureBackedBuffer};