@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
44 lines (41 loc) • 1.26 kB
JavaScript
import { Entity } from '../entity.js';
import { GSplatInstance } from '../../scene/gsplat/gsplat-instance.js';
import { GSplat } from '../../scene/gsplat/gsplat.js';
import { GSplatCompressed } from '../../scene/gsplat/gsplat-compressed.js';
class GSplatResource {
constructor(device, splatData) {
this.device = void 0;
this.splatData = void 0;
this.splat = null;
this.device = device;
this.splatData = splatData;
}
destroy() {
var _this$splat;
this.device = null;
this.splatData = null;
(_this$splat = this.splat) == null || _this$splat.destroy();
this.splat = null;
}
createSplat() {
if (!this.splat) {
this.splat = this.splatData.isCompressed ? new GSplatCompressed(this.device, this.splatData) : new GSplat(this.device, this.splatData);
}
return this.splat;
}
instantiate(options = {}) {
const splatInstance = this.createInstance(options);
const entity = new Entity();
const component = entity.addComponent('gsplat', {
instance: splatInstance
});
entity.setLocalEulerAngles(0, 0, 180);
component.customAabb = splatInstance.splat.aabb.clone();
return entity;
}
createInstance(options = {}) {
const splat = this.createSplat();
return new GSplatInstance(splat, options);
}
}
export { GSplatResource };