diff --git a/src/renderers/webgl/programs/RenderProgram.ts b/src/renderers/webgl/programs/RenderProgram.ts index 4b04ab5..0e53aca 100644 --- a/src/renderers/webgl/programs/RenderProgram.ts +++ b/src/renderers/webgl/programs/RenderProgram.ts @@ -7,6 +7,7 @@ import { Color32 } from "../../../math/Color32"; import { ObjectAddedEvent, ObjectChangedEvent, ObjectRemovedEvent } from "../../../events/Events"; import { Splat } from "../../../splats/Splat"; import { WebGLRenderer } from "../../WebGLRenderer"; +import { Scene } from "../../../core/Scene" const vertexShaderSource = /* glsl */ `#version 300 es precision highp float; @@ -303,7 +304,7 @@ class RenderProgram extends ShaderProgram { e.object.addEventListener("objectChanged", handleObjectChanged); } - this.dispose(); + resetSplatData(); }; const handleObjectRemoved = (event: Event) => { @@ -313,7 +314,7 @@ class RenderProgram extends ShaderProgram { e.object.removeEventListener("objectChanged", handleObjectChanged); } - this.dispose(); + resetSplatData(); }; const handleObjectChanged = (event: Event) => { @@ -324,6 +325,14 @@ class RenderProgram extends ShaderProgram { } }; + const resetSplatData = () => { + this._renderData?.dispose(); + this._renderData = new RenderData(this._scene as Scene); + + this._worker?.terminate(); + createWorker(); + }; + this._render = () => { if (!this._scene || !this._camera || !this.renderData) { console.error("Cannot render without scene and camera"); @@ -478,7 +487,7 @@ class RenderProgram extends ShaderProgram { gl.vertexAttribIPointer(indexAttribute, 1, gl.INT, 0, 0); gl.vertexAttribDivisor(indexAttribute, 1); - gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, this.renderData.vertexCount); + gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, this.depthIndex.length); }; this._dispose = () => {