diff --git a/src/mol-gl/compute/histogram-pyramid/reduction.ts b/src/mol-gl/compute/histogram-pyramid/reduction.ts index ff44201b45fb8f093afb17c8f38dc54fafecfb37..407e2f9b250eb2a5d7d0e3afe55b77ffcee22364 100644 --- a/src/mol-gl/compute/histogram-pyramid/reduction.ts +++ b/src/mol-gl/compute/histogram-pyramid/reduction.ts @@ -64,21 +64,19 @@ function createHistopyramidReductionRenderable(ctx: WebGLContext, inputLevel: Te } type TextureFramebuffer = { texture: Texture, framebuffer: Framebuffer } -const LevelTexturesFramebuffers: TextureFramebuffer[] = []; function getLevelTextureFramebuffer(ctx: WebGLContext, level: number) { - let textureFramebuffer = LevelTexturesFramebuffers[level]; const size = Math.pow(2, level); - if (textureFramebuffer === undefined) { - const texture = ctx.isWebGL2 - ? getTexture(`level${level}`, ctx, 'image-int32', 'alpha', 'int', 'nearest') - : getTexture(`level${level}`, ctx, 'image-uint8', 'rgba', 'ubyte', 'nearest'); - texture.define(size, size); - const framebuffer = getFramebuffer(`level${level}`, ctx); + const name = `level${level}`; + const texture = ctx.isWebGL2 + ? getTexture(name, ctx, 'image-int32', 'alpha', 'int', 'nearest') + : getTexture(name, ctx, 'image-uint8', 'rgba', 'ubyte', 'nearest'); + texture.define(size, size); + let framebuffer = tryGetFramebuffer(name, ctx); + if (!framebuffer) { + framebuffer = getFramebuffer(name, ctx); texture.attachFramebuffer(framebuffer, 0); - textureFramebuffer = { texture, framebuffer }; - LevelTexturesFramebuffers[level] = textureFramebuffer; } - return textureFramebuffer; + return { texture, framebuffer }; } function setRenderingDefaults(ctx: WebGLContext) { @@ -108,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