setTextureParameters method

void setTextureParameters(
  1. dynamic textureType,
  2. Texture texture,
  3. dynamic supportsMips
)

Implementation

void setTextureParameters(textureType, Texture texture, supportsMips) {
  if (supportsMips) {
    gl.texParameteri(
        textureType, gl.TEXTURE_WRAP_S, wrappingToGL[texture.wrapS]!);
    gl.texParameteri(
        textureType, gl.TEXTURE_WRAP_T, wrappingToGL[texture.wrapT]!);

    if (textureType == gl.TEXTURE_3D || textureType == gl.TEXTURE_2D_ARRAY) {
      gl.texParameteri(
          textureType, gl.TEXTURE_WRAP_R, wrappingToGL[texture.wrapR]!);
    }

    gl.texParameteri(
        textureType, gl.TEXTURE_MAG_FILTER, filterToGL[texture.magFilter]!);
    gl.texParameteri(
        textureType, gl.TEXTURE_MIN_FILTER, filterToGL[texture.minFilter]!);
  } else {
    gl.texParameteri(textureType, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
    gl.texParameteri(textureType, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);

    if (textureType == gl.TEXTURE_3D || textureType == gl.TEXTURE_2D_ARRAY) {
      gl.texParameteri(textureType, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE);
    }

    if (texture.wrapS != ClampToEdgeWrapping ||
        texture.wrapT != ClampToEdgeWrapping) {
      print(
          'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.');
    }

    gl.texParameteri(textureType, gl.TEXTURE_MAG_FILTER,
        filterFallback(texture.magFilter));
    gl.texParameteri(textureType, gl.TEXTURE_MIN_FILTER,
        filterFallback(texture.minFilter));

    if (texture.minFilter != NearestFilter &&
        texture.minFilter != LinearFilter) {
      print(
          'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.');
    }
  }

  var extension = extensions.get('EXT_texture_filter_anisotropic');

  if (extension != null) {
    if (texture.type == FloatType &&
        extensions.get('OES_texture_float_linear') == null) return;
    if (texture.type == HalfFloatType &&
        (isWebGL2 || extensions.get('OES_texture_half_float_linear')) ==
            null) {
      return;
    }

    if (texture.anisotropy > 1 ||
        properties.get(texture)["__currentAnisotropy"] != null) {
      // print("extension: ${extension} ... extension.TEXTURE_MAX_ANISOTROPY_EXT: ${extension.TEXTURE_MAX_ANISOTROPY_EXT} ");

      if (kIsWeb) {
        gl.texParameterf(textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT,
            Math.min(texture.anisotropy, capabilities.getMaxAnisotropy()).toDouble());
      } else {
        gl.texParameterf(
            textureType,
            gl.TEXTURE_MAX_ANISOTROPY_EXT,
            Math.min(texture.anisotropy, capabilities.getMaxAnisotropy()).toDouble()
          );
      }

      properties.get(texture)["__currentAnisotropy"] = texture.anisotropy;
    }
  }
}