Ver código fonte

don't delete externaly defined texture in render-item

Alexander Rose 6 anos atrás
pai
commit
f005f73dc0

+ 2 - 23
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;
 }

+ 8 - 2
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

+ 1 - 1
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)