Переглянути джерело

faster gl buffer deletion

Alexander Rose 6 роки тому
батько
коміт
f62a431e79
2 змінених файлів з 6 додано та 4 видалено
  1. 6 1
      src/mol-canvas3d/canvas3d.ts
  2. 0 3
      src/mol-gl/webgl/buffer.ts

+ 6 - 1
src/mol-canvas3d/canvas3d.ts

@@ -126,6 +126,7 @@ namespace Canvas3D {
 
         let pickDirty = true
         let isPicking = false
+        let isUpdating = false
         let drawPending = false
         let lastRenderTime = -1
 
@@ -182,7 +183,7 @@ namespace Canvas3D {
         }
 
         function render(variant: RenderVariant, force: boolean) {
-            if (isPicking) return false
+            if (isPicking || isUpdating) return false
 
             let didRender = false
             controls.update()
@@ -285,6 +286,7 @@ namespace Canvas3D {
         }
 
         function add(repr: Representation.Any) {
+            isUpdating = true
             const oldRO = reprRenderObjects.get(repr)
             const newRO = new Set<RenderObject>()
             repr.renderObjects.forEach(o => newRO.add(o))
@@ -299,6 +301,7 @@ namespace Canvas3D {
             reprCount.next(reprRenderObjects.size)
             boundingSphereHelper.update()
             scene.update()
+            isUpdating = false
             requestDraw(true)
         }
 
@@ -329,11 +332,13 @@ namespace Canvas3D {
                 }
                 const renderObjects = reprRenderObjects.get(repr)
                 if (renderObjects) {
+                    isUpdating = true
                     renderObjects.forEach(o => scene.remove(o))
                     reprRenderObjects.delete(repr)
                     reprCount.next(reprRenderObjects.size)
                     boundingSphereHelper.update()
                     scene.update()
+                    isUpdating = false
                     requestDraw(true)
                 }
             },

+ 0 - 3
src/mol-gl/webgl/buffer.ts

@@ -142,9 +142,6 @@ export function createBuffer(ctx: WebGLContext, array: ArrayType, itemSize: Buff
 
         destroy: () => {
             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)
             destroyed = true
             ctx.bufferCount -= 1