From 2bd1a01afbd7ede5c7bb2f9a4f0345e3eb7c8319 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Mal=C3=BD?= <michal.maly@ibt.cas.cz> Date: Tue, 10 Aug 2021 09:15:05 +0200 Subject: [PATCH] Do not attach framebuffer unnecessarily --- .../compute/histogram-pyramid/reduction.ts | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/mol-gl/compute/histogram-pyramid/reduction.ts b/src/mol-gl/compute/histogram-pyramid/reduction.ts index a622e1fc5..407e2f9b2 100644 --- a/src/mol-gl/compute/histogram-pyramid/reduction.ts +++ b/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 -- GitLab