loadTextureImage method

Future<Texture?> loadTextureImage(
  1. int textureIndex,
  2. int sourceIndex,
  3. TextureLoader loader
)

Implementation

Future<Texture?> loadTextureImage(int textureIndex, int sourceIndex, TextureLoader loader) async {
  final parser = this;
  final json = this.json;
  final textureDef = json["textures"][textureIndex];
  final sourceDef = json["images"][sourceIndex];
  final cacheKey = '${(sourceDef["uri"] ?? sourceDef["bufferView"])}:${textureDef["sampler"]}';

  if (textureCache[cacheKey] != null) {
    // See https://github.com/mrdoob/three.js/issues/21559.
    return textureCache[cacheKey];
  }

  loader.flipY = false;
  Texture? texture = await loadImageSource(sourceIndex, loader);

  texture?.flipY = false;

  if (textureDef["name"] != null) texture?.name = textureDef["name"];

  final samplers = json["samplers"] ?? {};
  Map sampler = samplers[textureDef["sampler"]] ?? {};

  texture?.magFilter = webglFilters[sampler["magFilter"]] ?? LinearFilter;
  texture?.minFilter = webglFilters[sampler["minFilter"]] ?? LinearMipmapLinearFilter;
  texture?.wrapS = webglWrappings[sampler["wrapS"]] ?? RepeatWrapping;
  texture?.wrapT = webglWrappings[sampler["wrapT"]] ?? RepeatWrapping;

  parser.associations[texture] = {"textures": textureIndex};

  textureCache[cacheKey] = texture;

  return texture;
}