Browse Source

Do not attach framebuffer unnecessarily

Michal Malý 3 years ago
parent
commit
2bd1a01afb
1 changed files with 14 additions and 6 deletions
  1. 14 6
      src/mol-gl/compute/histogram-pyramid/reduction.ts

+ 14 - 6
src/mol-gl/compute/histogram-pyramid/reduction.ts

@@ -66,14 +66,17 @@ function createHistopyramidReductionRenderable(ctx: WebGLContext, inputLevel: Te
 type TextureFramebuffer = { texture: Texture, framebuffer: Framebuffer }
 function getLevelTextureFramebuffer(ctx: WebGLContext, level: number) {
     const size = Math.pow(2, level);
+    const name = `level${level}`;
     const texture = ctx.isWebGL2
-        ? getTexture(`level${level}`, ctx, 'image-int32', 'alpha', 'int', 'nearest')
-        : getTexture(`level${level}`, ctx, 'image-uint8', 'rgba', 'ubyte', 'nearest');
+        ? getTexture(name, ctx, 'image-int32', 'alpha', 'int', 'nearest')
+        : getTexture(name, ctx, 'image-uint8', 'rgba', 'ubyte', 'nearest');
     texture.define(size, size);
-    const framebuffer = getFramebuffer(`level${level}`, ctx);
-    texture.attachFramebuffer(framebuffer, 0);
-    const textureFramebuffer = { texture, framebuffer };
-    return textureFramebuffer;
+    let framebuffer = tryGetFramebuffer(name, ctx);
+    if (!framebuffer) {
+        framebuffer = getFramebuffer(name, ctx);
+        texture.attachFramebuffer(framebuffer, 0);
+    }
+    return { texture, framebuffer };
 }
 
 function setRenderingDefaults(ctx: WebGLContext) {
@@ -103,6 +106,11 @@ function getTexture(name: string, webgl: WebGLContext, kind: TextureKind, format
     return webgl.namedTextures[_name];
 }
 
+function tryGetFramebuffer(name: string, webgl: WebGLContext): Framebuffer | undefined {
+    const _name = `${HistogramPyramidName}-${name}`;
+    return webgl.namedFramebuffers[_name];
+}
+
 export interface HistogramPyramid {
     pyramidTex: Texture
     count: number