@luma.gl/engine
Version:
3D Engine Components for luma.gl
55 lines (45 loc) • 1.49 kB
text/typescript
// luma.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import {RenderPass} from '@luma.gl/core';
import {ScenegraphNode, ScenegraphNodeProps} from './scenegraph-node';
import {Model} from '../model/model';
export type ModelNodeProps = ScenegraphNodeProps & {
model: Model;
managedResources?: any[];
bounds?: [[number, number, number], [number, number, number]];
};
export class ModelNode extends ScenegraphNode {
readonly model: Model;
bounds: [[number, number, number], [number, number, number]] | null = null;
managedResources: any[];
// TODO - is this used? override callbacks to make sure we call them with this
// onBeforeRender = null;
// onAfterRender = null;
// AfterRender = null;
constructor(props: ModelNodeProps) {
super(props);
// Create new Model or used supplied Model
this.model = props.model;
this.managedResources = props.managedResources || [];
this.bounds = props.bounds || null;
this.setProps(props);
}
override destroy(): void {
if (this.model) {
this.model.destroy();
// @ts-expect-error
this.model = null;
}
this.managedResources.forEach(resource => resource.destroy());
this.managedResources = [];
}
override getBounds(): [number[], number[]] | null {
return this.bounds;
}
// Expose model methods
draw(renderPass: RenderPass) {
// Return value indicates if something was actually drawn
return this.model.draw(renderPass);
}
}