CesiumGS/cesium

Feature ID Textures ignore sampler wrap mode

Fechada

#11.574 aberto em 19 de out. de 2023

 (3 comentários) (0 reação) (0 responsável)JavaScript (3.324 forks)batch import
category - model/gltfgood first issuetype - bug

Métricas do repositório

Stars
 (11.758 estrelas)
Métricas de merge de PR
 (Mesclagem média 15d 12h) (23 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