UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 1.86 kB
import{createGeometryData as e,C_VBO_INFO as t}from"./Utils.js";import{BufferObject as r}from"../../../webgl/BufferObject.js";import{Usage as s}from"../../../webgl/enums.js";import{VertexArrayObject as a}from"../../../webgl/VertexArrayObject.js";class f{constructor(a){this.geometryMap=e((()=>({indexBuffer:r.createIndex(a,s.STATIC_DRAW),vao:null})),((e,s)=>({vertexBuffer:r.createVertex(a,t[s])})))}dispose(){for(let e=0;e<5;e++){const t=this.geometryMap[e];if(t){t.data.vao&&t.data.vao.dispose(!1),t.data.indexBuffer&&t.data.indexBuffer.dispose();for(const e in t.buffers)t.buffers[e]&&t.buffers[e].data.vertexBuffer.dispose()}}}get(e){const t=this.geometryMap[e];return{getVAO(e,r,s){if(!t.data.vao){const f={};for(const e in t.buffers)f[e]=t.buffers[e].data.vertexBuffer;t.data.vao=new a(e,s,r,f,t.data.indexBuffer)}return t.data.vao}}}has(e){return null!=this.geometryMap[e]}upload(e,t){t.forEach(((t,r)=>{this._upload(t,r,e)}))}_upload(e,t,r){if(e.indices&&(e.indices.allDirty?this._uploadIndices(r,t):null!=e.indices.from&&null!=e.indices.count&&this._uploadIndices(r,t,e.indices.from,e.indices.count)),e.vertices){const s=e.vertices;for(const e in s){const a=s[e];a.allDirty?this._uploadVertices(r,t,e):null!=a.from&&null!=a.count&&this._uploadVertices(r,t,e,a.from,a.count)}}}_uploadVertices(e,t,r,s,a){const f=this.geometryMap[t];if(!f)return;const o=e.geometries[t].vertexBuffer[r];if(!o)return;const{data:i,stride:n}=o;if(f.buffers[r]&&i.length>0){const e=n/i.BYTES_PER_ELEMENT;null!=s&&null!=a?f.buffers[r].data.vertexBuffer.setSubData(i,s*e,s*e,(s+a)*e):f.buffers[r].data.vertexBuffer.setData(i)}}_uploadIndices(e,t,r,s){const a=this.geometryMap[t];if(!a)return;const f=e.geometries[t].indexBuffer;a.data.indexBuffer&&f.length>0&&(null!=r&&null!=s?a.data.indexBuffer.setSubData(f,r,r,r+s):a.data.indexBuffer.setData(f))}}export{f as default};