From 81bc116c4db70ddda1d2297c87fde9f7eed2d2c2 Mon Sep 17 00:00:00 2001 From: dsehnal <david.sehnal@gmail.com> Date: Thu, 8 Apr 2021 09:49:35 +0200 Subject: [PATCH] TextureImage.filter --- src/examples/basic-wrapper/custom-theme.ts | 1 + src/mol-geo/geometry/color-data.ts | 4 ++-- src/mol-gl/renderable/schema.ts | 2 +- src/mol-gl/renderable/util.ts | 2 ++ src/mol-gl/webgl/texture.ts | 3 +++ src/mol-theme/color.ts | 2 ++ 6 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/examples/basic-wrapper/custom-theme.ts b/src/examples/basic-wrapper/custom-theme.ts index 583e1a774..b229de3f2 100644 --- a/src/examples/basic-wrapper/custom-theme.ts +++ b/src/examples/basic-wrapper/custom-theme.ts @@ -24,6 +24,7 @@ export function CustomColorTheme( return ((t * scale) | 0) as Color; }, palette: { + filter: 'nearest', colors: [ ColorNames.red, ColorNames.pink, diff --git a/src/mol-geo/geometry/color-data.ts b/src/mol-geo/geometry/color-data.ts index 63aab0939..5c8c3c0bf 100644 --- a/src/mol-geo/geometry/color-data.ts +++ b/src/mol-geo/geometry/color-data.ts @@ -159,7 +159,7 @@ function createVertexInstanceColor(locationIt: LocationIterator, color: Location function updatePaletteTexture(palette: ColorTheme.Palette, cell: ValueCell<TextureImage<Uint8Array>>) { let isSynced = true; const texture = cell.ref.value; - if (palette.colors.length !== texture.width) { + if (palette.colors.length !== texture.width || texture.filter !== palette.filter) { isSynced = false; } else { const data = texture.array; @@ -184,5 +184,5 @@ function updatePaletteTexture(palette: ColorTheme.Palette, cell: ValueCell<Textu array[o++] = b; } - ValueCell.update(cell, { array, height: 1, width: palette.colors.length }); + ValueCell.update(cell, { array, height: 1, width: palette.colors.length, filter: palette.filter }); } \ No newline at end of file diff --git a/src/mol-gl/renderable/schema.ts b/src/mol-gl/renderable/schema.ts index 89d2d2b14..8f0b00b72 100644 --- a/src/mol-gl/renderable/schema.ts +++ b/src/mol-gl/renderable/schema.ts @@ -185,7 +185,7 @@ export const ColorSchema = { uColor: UniformSpec('v3', 'material'), uColorTexDim: UniformSpec('v2'), tColor: TextureSpec('image-uint8', 'rgb', 'ubyte', 'nearest'), - tPalette: TextureSpec('image-uint8', 'rgb', 'ubyte', 'linear'), + tPalette: TextureSpec('image-uint8', 'rgb', 'ubyte', 'nearest'), dColorType: DefineSpec('string', ['uniform', 'attribute', 'instance', 'group', 'groupInstance', 'vertex', 'vertexInstance']), dUsePalette: DefineSpec('boolean'), } as const; diff --git a/src/mol-gl/renderable/util.ts b/src/mol-gl/renderable/util.ts index fb4caa06c..c732f4ca0 100644 --- a/src/mol-gl/renderable/util.ts +++ b/src/mol-gl/renderable/util.ts @@ -7,6 +7,7 @@ import { Sphere3D } from '../../mol-math/geometry'; import { Vec3, Mat4 } from '../../mol-math/linear-algebra'; import { BoundaryHelper } from '../../mol-math/geometry/boundary-helper'; +import { TextureFilter } from '../webgl/texture'; export function calculateTextureInfo (n: number, itemSize: number) { n = Math.max(n, 2); // observed issues with 1 pixel textures @@ -22,6 +23,7 @@ export interface TextureImage<T extends Uint8Array | Float32Array | Int32Array> readonly width: number readonly height: number readonly flipY?: boolean + readonly filter?: TextureFilter } export interface TextureVolume<T extends Uint8Array | Float32Array> { diff --git a/src/mol-gl/webgl/texture.ts b/src/mol-gl/webgl/texture.ts index 7220f6751..042d931bd 100644 --- a/src/mol-gl/webgl/texture.ts +++ b/src/mol-gl/webgl/texture.ts @@ -283,6 +283,9 @@ export function createTexture(gl: GLRenderingContext, extensions: WebGLExtension gl.bindTexture(gl.TEXTURE_2D, texture); gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, format, type, data); } else if (isTexture2d(data, target, gl)) { + const _filter = data.filter ? getFilter(gl, data.filter) : filter; + gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, _filter); + gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, _filter); gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, !!data.flipY); if (sub) { gl.texSubImage2D(target, 0, 0, 0, data.width, data.height, format, type, data.array); diff --git a/src/mol-theme/color.ts b/src/mol-theme/color.ts index 6ca6ee7af..82515bbee 100644 --- a/src/mol-theme/color.ts +++ b/src/mol-theme/color.ts @@ -35,6 +35,7 @@ import { OperatorHklColorThemeProvider } from './color/operator-hkl'; import { PartialChargeColorThemeProvider } from './color/partial-charge'; import { AtomIdColorThemeProvider } from './color/atom-id'; import { EntityIdColorThemeProvider } from './color/entity-id'; +import { TextureFilter } from '../mol-gl/webgl/texture'; export type LocationColor = (location: Location, isSecondary: boolean) => Color @@ -62,6 +63,7 @@ namespace ColorTheme { } export interface Palette { + filter?: TextureFilter, colors: Color[] } -- GitLab