diff --git a/src/examples/basic-wrapper/custom-theme.ts b/src/examples/basic-wrapper/custom-theme.ts index 583e1a774ecabed7cdf514547fc463bfab63eb67..b229de3f25a0df38719af122d65f8abe63de4666 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 63aab0939c83799723f80b2ff7f65943b53eac5c..5c8c3c0bfe5c6ea33bd38d025f1a63e4559c0e69 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 89d2d2b14071ad89394e81337cdbd1d1259d2ae0..8f0b00b72b0fd96481cb5b4592f94360c462ea40 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 fb4caa06c095d191789b62d02128e16f41a8c726..c732f4ca0ddf94d439d2cee04cc0732100e7fbaf 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 7220f675143294ae7b7fffe78693121814654834..042d931bd435d1e9f4046d22e74f67c300e67253 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 6ca6ee7af325331b65ed05f69b61f8b8530ac31c..82515bbee903c1e53d262f5e024f34164ad5376e 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[] }