UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 1.46 kB
import{BufferViewVec4u8 as t}from"../../../../../geometry/support/buffer/BufferView.js";import{TextureType as e,PixelFormat as i,PixelType as s,TextureSamplingMode as r,TextureWrapMode as h}from"../../../../webgl/enums.js";import{Texture as a}from"../../../../webgl/Texture.js";class d{constructor(d,u=1){this._rctx=d,this._fieldCount=u,this.textureWidth=4096,this._dirty=!0,this._texture=new a(this._rctx,{target:e.TEXTURE_2D,pixelFormat:i.RGBA,dataType:s.UNSIGNED_BYTE,samplingMode:r.NEAREST,wrapMode:h.CLAMP_TO_EDGE,width:this.textureWidth,height:1,flipped:!1}),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)}resizeToFit(e){const i=e*this._fieldCount;if(i>=this._data.count){const e=Math.ceil((i+1)/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{d as TextureBackedBuffer};