diff --git a/src/mol-geo/representation/structure/visual/gaussian-density-volume.ts b/src/mol-geo/representation/structure/visual/gaussian-density-volume.ts index c129566b131f07479175a7b61cea98e2521c2ba0..7a582361c3f08f5c9a9a0ca7deb47f53922eca59 100644 --- a/src/mol-geo/representation/structure/visual/gaussian-density-volume.ts +++ b/src/mol-geo/representation/structure/visual/gaussian-density-volume.ts @@ -22,30 +22,9 @@ async function createGaussianDensityVolume(ctx: RuntimeContext, unit: Unit, stru const densityTextureData = await computeUnitGaussianDensityTexture(unit, p, oldTexture).runInContext(ctx) const { transform, texture, bbox, gridDimension } = densityTextureData - directVolume = texture.depth == 0 ? - DirectVolume2d.create(bbox, gridDimension, transform, texture, directVolume as DirectVolume2d) : + directVolume = texture.depth === 0 ? + DirectVolume2d.create(bbox, gridDimension, transform, texture, directVolume as DirectVolume2d) : DirectVolume3d.create(bbox, gridDimension, transform, texture, directVolume as DirectVolume3d) - - - // if (directVolume) { - // ValueCell.update(directVolume.gridDimension, gridDimension) - // ValueCell.update(directVolume.gridTextureDim, Vec2.set(directVolume.gridTextureDim.ref.value, texture.width, texture.height)) - // ValueCell.update(directVolume.bboxMin, bbox.min) - // ValueCell.update(directVolume.bboxMax, bbox.max) - // ValueCell.update(directVolume.bboxSize, Vec3.sub(directVolume.bboxSize.ref.value, bbox.max, bbox.min)) - // ValueCell.update(directVolume.transform, transform) - // } else { - // directVolume = { - // kind: 'direct-volume-2d' as 'direct-volume-2d', - // gridDimension: ValueCell.create(gridDimension), - // gridTexture: ValueCell.create(texture), - // gridTextureDim: ValueCell.create(Vec2.create(texture.width, texture.height)), - // bboxMin: ValueCell.create(bbox.min), - // bboxMax: ValueCell.create(bbox.max), - // bboxSize: ValueCell.create(Vec3.sub(Vec3.zero(), bbox.max, bbox.min)), - // transform: ValueCell.create(transform), - // } - // } return directVolume; } diff --git a/src/mol-gl/webgl/render-item.ts b/src/mol-gl/webgl/render-item.ts index fa224bdfc54f801ea22adc75a49153ce7be3ea20..ec3d687d23fba19bbe89a1d09ed2e00ce6b87a60 100644 --- a/src/mol-gl/webgl/render-item.ts +++ b/src/mol-gl/webgl/render-item.ts @@ -227,8 +227,9 @@ export function createRenderItem(ctx: Context, drawMode: DrawMode, shaderCode: S Object.keys(textureValues).forEach(k => { const value = textureValues[k] if (value.ref.version !== versions[k]) { - // console.log('texture version changed, uploading image', k) + // update of textures with kind 'texture2d' or 'texture3d' is done externally if (schema[k].kind !== 'texture2d' && schema[k].kind !== 'texture3d') { + // console.log('texture version changed, uploading image', k) textures[k].load(value.ref.value as TextureImage<any> | TextureVolume<any>) versions[k] = value.ref.version valueChanges.textures = true @@ -244,7 +245,12 @@ export function createRenderItem(ctx: Context, drawMode: DrawMode, shaderCode: S programs[k].free() deleteVertexArray(ctx, vertexArrays[k]) }) - Object.keys(textures).forEach(k => textures[k].destroy()) + Object.keys(textures).forEach(k => { + // lifetime of textures with kind 'texture2d' or 'texture3d' is defined externally + if (schema[k].kind !== 'texture2d' && schema[k].kind !== 'texture3d') { + textures[k].destroy() + } + }) Object.keys(attributeBuffers).forEach(k => attributeBuffers[k].destroy()) if (elementsBuffer) elementsBuffer.destroy() destroyed = true diff --git a/src/mol-gl/webgl/texture.ts b/src/mol-gl/webgl/texture.ts index db42755fbe1fc0c2be5c970ade0f98b20735db6e..69bb48dfeae42cebc786d20bdcd9eef2c646b467 100644 --- a/src/mol-gl/webgl/texture.ts +++ b/src/mol-gl/webgl/texture.ts @@ -160,7 +160,7 @@ export function createTexture(ctx: Context, kind: TextureKind, _format: TextureF gl.bindTexture(target, texture) gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, filter) gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, filter) - // clamp-to-edge needed for non-power-of-two textures + // clamp-to-edge needed for non-power-of-two textures in webgl gl.texParameteri(target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.bindTexture(target, null)