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
- Use a concrete engine (WebGL/WebGPU) that implements resizeImageBitmap
- Implement the method in a custom engine subclass, reusing ResizeImageBitmap from engine.common.ts
- Pre-resize images before handing them to Babylon and avoid the resizeImageBitmap path
- 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
- Prefer concrete engines for pixel-processing workloads
- Share implementations from engine.common.ts (ResizeImageBitmap) in custom engines
- Pre-resize source images so the runtime resize path is never hit
- Stub engine methods in headless test setups
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
- createImageBitmapFromSource is not implemented
- getFontOffset is not implemented
- You must implement this method
- No engine available
- DumpData: No WebGL context available. Cannot dump data.
AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30).
Data as JSON: /api/errors/5284f1d08be1fb72.
Report an issue: GitHub.