Skip to content

Commit 86e8133

Browse files
committed
Allow to delete and recreate a shader-doodle component
(via React for example, in my case to change the source image for sd-texture) /!\ Probably includes a memory leak since GeneralTexture.dispose() doesn't seem to exist (yet?)
1 parent b289a18 commit 86e8133

File tree

4 files changed

+8
-3
lines changed

4 files changed

+8
-3
lines changed

src/sd-texture.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ class TextureElement extends SDBaseElement {
4141

4242
disconnectedCallback() {
4343
this.program.removeTexture(this.texture);
44-
this.texture.dispose();
44+
// Dispose doesn't seem to exist on this object. A TODO?
45+
if (typeof this.texture.dispose === 'function') this.texture.dispose();
4546
}
4647

4748
get forceUpdate() {

src/shader-doodle.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import './sd-audio.js';
44
import './sd-texture.js';
55

66
import Surface from './webgl/Surface.js';
7+
import Renderer from './webgl/Renderer.js';
78

89
class ShaderDoodleElement extends SDNodeElement {
910
constructor() {
@@ -29,6 +30,7 @@ class ShaderDoodleElement extends SDNodeElement {
2930
}
3031

3132
async init() {
33+
Renderer.resetSingleton();
3234
this.shadow.innerHTML = Template.render();
3335
const canvas = Template.map(this.shadow).canvas;
3436

src/webgl/Program.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,9 @@ export default function Program(gl, vs, fs, vertices, shadertoy = false) {
177177
}
178178

179179
function dispose() {
180-
textures.forEach(t => t.dispose());
180+
textures.forEach(t => {
181+
if (typeof t.dispose === 'function') t.dispose();
182+
});
181183
textures.clear();
182184
gl.deleteProgram(program);
183185
}

src/webgl/Renderer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ Renderer.singleton = function() {
142142
};
143143

144144
Renderer.resetSingleton = function() {
145-
singletonRenderer.dispose();
145+
if (singletonRenderer) singletonRenderer.dispose();
146146
singletonRenderer = Renderer();
147147
};
148148

0 commit comments

Comments
 (0)