Skip to content
Snippets Groups Projects
Unverified Commit 950b1c17 authored by David Sehnal's avatar David Sehnal Committed by GitHub
Browse files

Merge pull request #248 from MadCatX/fix-isosurface

Do not cache LevelTexturesFramebuffers as they may become invalid
parents ba1b03f0 2bd1a01a
No related branches found
No related tags found
No related merge requests found
...@@ -64,21 +64,19 @@ function createHistopyramidReductionRenderable(ctx: WebGLContext, inputLevel: Te ...@@ -64,21 +64,19 @@ function createHistopyramidReductionRenderable(ctx: WebGLContext, inputLevel: Te
} }
type TextureFramebuffer = { texture: Texture, framebuffer: Framebuffer } type TextureFramebuffer = { texture: Texture, framebuffer: Framebuffer }
const LevelTexturesFramebuffers: TextureFramebuffer[] = [];
function getLevelTextureFramebuffer(ctx: WebGLContext, level: number) { function getLevelTextureFramebuffer(ctx: WebGLContext, level: number) {
let textureFramebuffer = LevelTexturesFramebuffers[level];
const size = Math.pow(2, level); const size = Math.pow(2, level);
if (textureFramebuffer === undefined) { const name = `level${level}`;
const texture = ctx.isWebGL2 const texture = ctx.isWebGL2
? getTexture(`level${level}`, ctx, 'image-int32', 'alpha', 'int', 'nearest') ? getTexture(name, ctx, 'image-int32', 'alpha', 'int', 'nearest')
: getTexture(`level${level}`, ctx, 'image-uint8', 'rgba', 'ubyte', 'nearest'); : getTexture(name, ctx, 'image-uint8', 'rgba', 'ubyte', 'nearest');
texture.define(size, size); texture.define(size, size);
const framebuffer = getFramebuffer(`level${level}`, ctx); let framebuffer = tryGetFramebuffer(name, ctx);
if (!framebuffer) {
framebuffer = getFramebuffer(name, ctx);
texture.attachFramebuffer(framebuffer, 0); texture.attachFramebuffer(framebuffer, 0);
textureFramebuffer = { texture, framebuffer };
LevelTexturesFramebuffers[level] = textureFramebuffer;
} }
return textureFramebuffer; return { texture, framebuffer };
} }
function setRenderingDefaults(ctx: WebGLContext) { function setRenderingDefaults(ctx: WebGLContext) {
...@@ -108,6 +106,11 @@ function getTexture(name: string, webgl: WebGLContext, kind: TextureKind, format ...@@ -108,6 +106,11 @@ function getTexture(name: string, webgl: WebGLContext, kind: TextureKind, format
return webgl.namedTextures[_name]; return webgl.namedTextures[_name];
} }
function tryGetFramebuffer(name: string, webgl: WebGLContext): Framebuffer | undefined {
const _name = `${HistogramPyramidName}-${name}`;
return webgl.namedFramebuffers[_name];
}
export interface HistogramPyramid { export interface HistogramPyramid {
pyramidTex: Texture pyramidTex: Texture
count: number count: number
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment