UNPKG

playcanvas

Version:

Open-source WebGL/WebGPU 3D engine for the web

86 lines (83 loc) 2.53 kB
import { PIXELFORMAT_RGBA32U } from '../../platform/graphics/constants.js'; import { GSplatResourceBase } from './gsplat-resource-base.js'; import { GSplatFormat } from './gsplat-format.js'; class GSplatSogResource extends GSplatResourceBase { _actualDestroy() { this.streams.textures.delete('packedTexture'); this.streams.textures.delete('packedSh0'); this.streams.textures.delete('packedShN'); this.gsplatData.destroy(); super._actualDestroy(); } _populateParameters() { const { meta } = this.gsplatData; if (meta.means) { this.parameters.set('means_mins', meta.means.mins); this.parameters.set('means_maxs', meta.means.maxs); } if (meta.version === 2) { [ 'scales', 'sh0', 'shN' ].forEach((name)=>{ const v = meta[name]; if (v) { this.parameters.set(`${name}_mins`, v.codebook[0]); this.parameters.set(`${name}_maxs`, v.codebook[255]); } }); } else { [ 'scales', 'sh0' ].forEach((name)=>{ const v = meta[name]; if (v) { this.parameters.set(`${name}_mins`, Math.min(...v.mins.slice(0, 3))); this.parameters.set(`${name}_maxs`, Math.max(...v.maxs.slice(0, 3))); } }); [ 'shN' ].forEach((name)=>{ const v = meta[name]; if (v) { this.parameters.set(`${name}_mins`, v.mins); this.parameters.set(`${name}_maxs`, v.maxs); } }); } } configureMaterialDefines(defines) { defines.set('SH_BANDS', this.gsplatData.shBands); } constructor(device, gsplatData){ super(device, gsplatData); const sizeTexture = gsplatData.means_l || gsplatData.packedTexture; if (sizeTexture) { this.streams.textureDimensions.set(sizeTexture.width, sizeTexture.height); } if (gsplatData.packedTexture) { this.streams.textures.set('packedTexture', gsplatData.packedTexture); } if (gsplatData.packedSh0) { this.streams.textures.set('packedSh0', gsplatData.packedSh0); } if (gsplatData.packedShN) { this.streams.textures.set('packedShN', gsplatData.packedShN); } const streams = [ { name: 'packedTexture', format: PIXELFORMAT_RGBA32U } ]; this._format = new GSplatFormat(device, streams, { readGLSL: '#include "gsplatSogVS"', readWGSL: '#include "gsplatSogVS"' }); this._populateParameters(); } } export { GSplatSogResource };