CesiumGS/cesium

Feature ID Textures ignore sampler wrap mode

Open

#11.574 aberto em 19 de out. de 2023

Ver no GitHub
 (3 comments) (0 reactions) (0 assignees)JavaScript (3.324 forks)batch import
category - model/gltfgood first issuetype - bug

Métricas do repositório

Stars
 (11.758 stars)
Métricas de merge de PR
 (Mesclagem média 26d 3h) (26 fundiu PRs em 30d)

Description

Feature ID textures are allowed to have any wrap mode, but CesiumJS incorrectly overrides this with CLAMP_TO_EDGE.

In GltfLoader there is this chunk of code for feature ID textures:

  const textureInfo = gltfFeatureIdTexture.texture;
  featureIdTexture.textureReader = loadTexture(
    loader,
    gltf,
    textureInfo,
    supportedImageFormats,
    frameState,
    Sampler.NEAREST // Feature ID textures require nearest sampling
  );

The last parameter for that function is samplerOverride, which replaces the original texture.sampler with the provided one. In Sampler.js:

Sampler.NEAREST = Object.freeze(
  new Sampler({
    wrapS: TextureWrap.CLAMP_TO_EDGE,
    wrapT: TextureWrap.CLAMP_TO_EDGE,
    minificationFilter: TextureMinificationFilter.NEAREST,
    magnificationFilter: TextureMagnificationFilter.NEAREST,
  })

Instead of completely replacing the old sampler with the new one, only the minificationFilter and magnificationFilter should be overriden.

Guia do colaborador