BabylonJS/Babylon.js · error

resizeImageBitmap is not implemented

Error message

resizeImageBitmap is not implemented

What it means

AbstractEngine.resizeImageBitmap is a pure-base abstraction that concrete engines override; the base implementation always throws. It resizes an image into a Uint8Array pixel buffer and requires canvas/2d-context support, so the pure class refuses to guess a behavior.

Source

Thrown at packages/dev/core/src/Engines/abstractEngine.pure.ts:2633

    /**
     * Engine abstraction for createImageBitmap
     * @param image source for image
     * @param options An object that sets options for the image's extraction.
     * @returns ImageBitmap
     */
    // eslint-disable-next-line @typescript-eslint/promise-function-async
    public createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap> {
        return createImageBitmap(image, options);
    }

    /**
     * Resize an image and returns the image data as an uint8array
     * @param image image to resize
     * @param bufferWidth destination buffer width
     * @param bufferHeight destination buffer height
     */
    public resizeImageBitmap(image: HTMLImageElement | ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array {
        throw new Error("resizeImageBitmap is not implemented");
    }

    /**
     * Get the current error code of the webGL context
     * @returns the error code
     */
    public abstract getError(): number;

    /**
     * Get Font size information
     * @param font font name
     */
    public getFontOffset(font: string): { ascent: number; height: number; descent: number } {
        throw new Error("getFontOffset is not implemented");
    }

    protected static _CreateCanvas(width: number, height: number): ICanvas {
        if (typeof document === "undefined") {

View on GitHub (pinned to 0592b347b8)

Solutions

  1. Use a concrete engine (WebGL/WebGPU) that implements resizeImageBitmap
  2. Implement the method in a custom engine subclass, reusing ResizeImageBitmap from engine.common.ts
  3. Pre-resize images before handing them to Babylon and avoid the resizeImageBitmap path
  4. In tests, stub the method: engine.resizeImageBitmap = () => expectedBuffer

Example fix

// before
const data = nullEngine.resizeImageBitmap(img, 64, 64); // throws
// after
import { ResizeImageBitmap } from 'core/Engines/engine.common';
nullEngine.resizeImageBitmap = (img, w, h) => ResizeImageBitmap(nullEngine, img, w, h);
Defensive patterns

Strategy: fallback

Validate before calling

if (engine.resizeImageBitmap === AbstractEngine.prototype.resizeImageBitmap) {
  // base 'not implemented' version; use manual resize via canvas instead
}

Type guard

function canResizeImageBitmap(engine: AbstractEngine): boolean {
  return engine.resizeImageBitmap !== AbstractEngine.prototype.resizeImageBitmap;
}

Try / catch

try {
  data = engine.resizeImageBitmap(img, w, h);
} catch (e) {
  if (e instanceof Error && e.message.includes('resizeImageBitmap is not implemented')) {
    data = manualResize(img, w, h); // own canvas drawImage + getImageData
  } else throw e;
}

Prevention

When it happens

Trigger: Calling engine.resizeImageBitmap(image, w, h) (directly or via texture loading of non-power-of-two images / RawTexture data paths) on an engine instance that did not override it (pure/NullEngine or minimal build).

Common situations: Headless Node.js tests using NullEngine while loading textures; custom/derived engine that forgot to implement resizeImageBitmap; tree-shaken builds dropping engine.common.ts implementation.

Related errors


AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30). Data as JSON: /api/errors/5284f1d08be1fb72. Report an issue: GitHub.