dsehnal 4 роки тому
батько
коміт
81bc116c4d

+ 1 - 0
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,

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

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

+ 2 - 0
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> {

+ 3 - 0
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);

+ 2 - 0
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[]
     }