Skip to content

Commit

Permalink
Fixed Splats in Scene Flickering When Adding or Removing (#87)
Browse files Browse the repository at this point in the history
* Fixed Splats in Scene Flickering When Adding or Removing
* Fixed splats flashing
* Made it so that the entire render program doesnt need to rebuild on add or remove splat
* Fixed Webgl Warning about drawArraysInstance fetch requires...

* fixed Scene import
  • Loading branch information
TravisThomp committed Mar 27, 2024
1 parent f41c6ea commit e8e0bb6
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/renderers/webgl/programs/RenderProgram.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -303,7 +304,7 @@ class RenderProgram extends ShaderProgram {
e.object.addEventListener("objectChanged", handleObjectChanged);
}

this.dispose();
resetSplatData();
};

const handleObjectRemoved = (event: Event) => {
Expand All @@ -313,7 +314,7 @@ class RenderProgram extends ShaderProgram {
e.object.removeEventListener("objectChanged", handleObjectChanged);
}

this.dispose();
resetSplatData();
};

const handleObjectChanged = (event: Event) => {
Expand All @@ -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");
Expand Down Expand Up @@ -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 = () => {
Expand Down

0 comments on commit e8e0bb6

Please sign in to comment.