{"record":{"id":"5284f1d08be1fb72","repo":"BabylonJS/Babylon.js","slug":"resizeimagebitmap-is-not-implemented","errorCode":null,"errorMessage":"resizeImageBitmap is not implemented","messagePattern":"resizeImageBitmap is not implemented","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/dev/core/src/Engines/abstractEngine.pure.ts","lineNumber":2633,"sourceCode":"    /**\r\n     * Engine abstraction for createImageBitmap\r\n     * @param image source for image\r\n     * @param options An object that sets options for the image's extraction.\r\n     * @returns ImageBitmap\r\n     */\r\n    // eslint-disable-next-line @typescript-eslint/promise-function-async\r\n    public createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap> {\r\n        return createImageBitmap(image, options);\r\n    }\r\n\r\n    /**\r\n     * Resize an image and returns the image data as an uint8array\r\n     * @param image image to resize\r\n     * @param bufferWidth destination buffer width\r\n     * @param bufferHeight destination buffer height\r\n     */\r\n    public resizeImageBitmap(image: HTMLImageElement | ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array {\r\n        throw new Error(\"resizeImageBitmap is not implemented\");\r\n    }\r\n\r\n    /**\r\n     * Get the current error code of the webGL context\r\n     * @returns the error code\r\n     */\r\n    public abstract getError(): number;\r\n\r\n    /**\r\n     * Get Font size information\r\n     * @param font font name\r\n     */\r\n    public getFontOffset(font: string): { ascent: number; height: number; descent: number } {\r\n        throw new Error(\"getFontOffset is not implemented\");\r\n    }\r\n\r\n    protected static _CreateCanvas(width: number, height: number): ICanvas {\r\n        if (typeof document === \"undefined\") {\r","sourceCodeStart":2615,"sourceCodeEnd":2651,"githubUrl":"https://github.com/BabylonJS/Babylon.js/blob/0592b347b8a4ee0236089ea86a749cacfdb266d8/packages/dev/core/src/Engines/abstractEngine.pure.ts#L2615-L2651","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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"],"exampleFix":"// before\nconst data = nullEngine.resizeImageBitmap(img, 64, 64); // throws\n// after\nimport { ResizeImageBitmap } from 'core/Engines/engine.common';\nnullEngine.resizeImageBitmap = (img, w, h) => ResizeImageBitmap(nullEngine, img, w, h);","handlingStrategy":"fallback","validationCode":"if (engine.resizeImageBitmap === AbstractEngine.prototype.resizeImageBitmap) {\n  // base 'not implemented' version; use manual resize via canvas instead\n}","typeGuard":"function canResizeImageBitmap(engine: AbstractEngine): boolean {\n  return engine.resizeImageBitmap !== AbstractEngine.prototype.resizeImageBitmap;\n}","tryCatchPattern":"try {\n  data = engine.resizeImageBitmap(img, w, h);\n} catch (e) {\n  if (e instanceof Error && e.message.includes('resizeImageBitmap is not implemented')) {\n    data = manualResize(img, w, h); // own canvas drawImage + getImageData\n  } else throw e;\n}","preventionTips":["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"],"tags":["abstract-method","image-resize","engine","headless"],"backgroundTag":"method-not-implemented","analyzedSha":"0592b347b8a4ee0236089ea86a749cacfdb266d8","analyzedAt":"2026-08-30T15:11:20.442Z","schemaVersion":2},"datasetVersion":"2026-08-30T18:17:15.746Z"}