Skip to content
Snippets Groups Projects
Commit f62a431e authored by Alexander Rose's avatar Alexander Rose
Browse files

faster gl buffer deletion

parent eecf0f31
No related branches found
No related tags found
No related merge requests found
...@@ -126,6 +126,7 @@ namespace Canvas3D { ...@@ -126,6 +126,7 @@ namespace Canvas3D {
let pickDirty = true let pickDirty = true
let isPicking = false let isPicking = false
let isUpdating = false
let drawPending = false let drawPending = false
let lastRenderTime = -1 let lastRenderTime = -1
...@@ -182,7 +183,7 @@ namespace Canvas3D { ...@@ -182,7 +183,7 @@ namespace Canvas3D {
} }
function render(variant: RenderVariant, force: boolean) { function render(variant: RenderVariant, force: boolean) {
if (isPicking) return false if (isPicking || isUpdating) return false
let didRender = false let didRender = false
controls.update() controls.update()
...@@ -285,6 +286,7 @@ namespace Canvas3D { ...@@ -285,6 +286,7 @@ namespace Canvas3D {
} }
function add(repr: Representation.Any) { function add(repr: Representation.Any) {
isUpdating = true
const oldRO = reprRenderObjects.get(repr) const oldRO = reprRenderObjects.get(repr)
const newRO = new Set<RenderObject>() const newRO = new Set<RenderObject>()
repr.renderObjects.forEach(o => newRO.add(o)) repr.renderObjects.forEach(o => newRO.add(o))
...@@ -299,6 +301,7 @@ namespace Canvas3D { ...@@ -299,6 +301,7 @@ namespace Canvas3D {
reprCount.next(reprRenderObjects.size) reprCount.next(reprRenderObjects.size)
boundingSphereHelper.update() boundingSphereHelper.update()
scene.update() scene.update()
isUpdating = false
requestDraw(true) requestDraw(true)
} }
...@@ -329,11 +332,13 @@ namespace Canvas3D { ...@@ -329,11 +332,13 @@ namespace Canvas3D {
} }
const renderObjects = reprRenderObjects.get(repr) const renderObjects = reprRenderObjects.get(repr)
if (renderObjects) { if (renderObjects) {
isUpdating = true
renderObjects.forEach(o => scene.remove(o)) renderObjects.forEach(o => scene.remove(o))
reprRenderObjects.delete(repr) reprRenderObjects.delete(repr)
reprCount.next(reprRenderObjects.size) reprCount.next(reprRenderObjects.size)
boundingSphereHelper.update() boundingSphereHelper.update()
scene.update() scene.update()
isUpdating = false
requestDraw(true) requestDraw(true)
} }
}, },
......
...@@ -142,9 +142,6 @@ export function createBuffer(ctx: WebGLContext, array: ArrayType, itemSize: Buff ...@@ -142,9 +142,6 @@ export function createBuffer(ctx: WebGLContext, array: ArrayType, itemSize: Buff
destroy: () => { destroy: () => {
if (destroyed) return if (destroyed) return
gl.bindBuffer(_bufferType, _buffer);
// set size to 1 before deleting
(gl as WebGLRenderingContext).bufferData(_bufferType, 1, _usageHint) // TODO remove cast when webgl2 types are fixed
gl.deleteBuffer(_buffer) gl.deleteBuffer(_buffer)
destroyed = true destroyed = true
ctx.bufferCount -= 1 ctx.bufferCount -= 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment