mrdoob/three.js · error

THREE.TextureUtils: Unknown texture type ${type}.

Error message

THREE.TextureUtils: Unknown texture type ${type}.

What it means

Thrown by getTextureTypeByteLength(type) when the texture data type is not among the recognized constants (UnsignedByteType, ByteType, UnsignedShortType, ShortType, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type, UnsignedInt101111Type). The function maps each type to a {byteLength, components} pair used to size uncompressed textures; unknown types have no mapping.

Source

Thrown at src/extras/TextureUtils.js:227

			return { byteLength: 1, components: 1 };
		case UnsignedShortType:
		case ShortType:
		case HalfFloatType:
			return { byteLength: 2, components: 1 };
		case UnsignedShort4444Type:
		case UnsignedShort5551Type:
			return { byteLength: 2, components: 4 };
		case UnsignedIntType:
		case IntType:
		case FloatType:
			return { byteLength: 4, components: 1 };
		case UnsignedInt5999Type:
		case UnsignedInt101111Type:
			return { byteLength: 4, components: 3 };

	}

	throw new Error( `THREE.TextureUtils: Unknown texture type ${type}.` );

}

/**
 * A class containing utility functions for textures.
 *
 * @hideconstructor
 */
class TextureUtils {

	/**
	 * Scales the texture as large as possible within its surface without cropping
	 * or stretching the texture. The method preserves the original aspect ratio of
	 * the texture. Akin to CSS `object-fit: contain`
	 *
	 * @param {Texture} texture - The texture.
	 * @param {number} aspect - The texture's aspect ratio.
	 * @return {Texture} The updated texture.

View on GitHub (pinned to da05705fa3)

Solutions

  1. Pass a valid THREE texture type constant for the type argument (e.g. THREE.UnsignedByteType, THREE.FloatType, THREE.HalfFloatType).
  2. Verify argument order is (width, height, format, type); type is the fourth argument.
  3. Ensure the constant is imported and not undefined at runtime.
  4. Upgrade three.js to a revision that includes your type in the switch.

Example fix

// before: type slot gets an invalid value
const b = THREE.TextureUtils.getByteLength(w, h, THREE.RGBAFormat, 12345);

// after: valid type constant
const b = THREE.TextureUtils.getByteLength(w, h, THREE.RGBAFormat, THREE.UnsignedByteType);
Defensive patterns

Strategy: validation

Validate before calling

import * as THREE from 'three';

const VALID_TYPES = new Set([
  THREE.UnsignedByteType, THREE.ByteType, THREE.UnsignedShortType, THREE.ShortType,
  THREE.UnsignedShort5551Type, THREE.UnsignedIntType, THREE.IntType,
  THREE.FloatType, THREE.UnsignedInt5999Type, THREE.UnsignedInt101111Type,
]);

if (!VALID_TYPES.has(type)) {
  throw new Error(`Unsupported texture type: ${type}`);
}

Type guard

function isValidTextureType(type, THREE) {
  return [
    THREE.UnsignedByteType, THREE.ByteType, THREE.UnsignedShortType, THREE.ShortType,
    THREE.UnsignedShort5551Type, THREE.UnsignedIntType, THREE.IntType,
    THREE.FloatType, THREE.UnsignedInt5999Type, THREE.UnsignedInt101111Type,
  ].includes(type);
}

Prevention

When it happens

Trigger: Calling TextureUtils.getByteLength with a type constant outside the supported set, or passing undefined/NaN for the type argument. Swapping format and type so an invalid value lands in the type slot. Using a HalfFloatType on a three.js build where its case is not present.

Common situations: Confusing the format and type argument positions. Using a numeric type ID from an incompatible three.js version. Forgetting to import the type constant so it resolves to undefined.

Related errors


AI-assisted analysis of mrdoob/three.js@da05705fa3 (2026-08-12). Data as JSON: /api/errors/42a84d3ea8d58b5d. Report an issue: GitHub.