{"record":{"id":"2f913fc06efda493","repo":"BabylonJS/Babylon.js","slug":"geometry-buffer-renderer-is-not-supported-but-is-r","errorCode":null,"errorMessage":"Geometry buffer renderer is not supported but is required for GIRSMManager.","messagePattern":"Geometry buffer renderer is not supported but is required for GIRSMManager\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/dev/core/src/Rendering/GlobalIllumination/giRSMManager.pure.ts","lineNumber":598,"sourceCode":"\r\n        if (this._firstActivation) {\r\n            this._firstActivation = false;\r\n            this._geomBufferEnabled = !!this._scene.geometryBufferRenderer;\r\n            this._geomBufferEnablePosition = this._scene.geometryBufferRenderer?.enablePosition ?? false;\r\n        }\r\n\r\n        if (!this._geomBufferEnabled) {\r\n            this._scene.disableGeometryBufferRenderer();\r\n        }\r\n\r\n        const geometryBufferRenderer = this._scene.enableGeometryBufferRenderer(\r\n            this._enableBlur ? this._outputDimensions : this._giTextureDimensions,\r\n            this._use32BitsDepthBuffer ? Constants.TEXTUREFORMAT_DEPTH32_FLOAT : Constants.TEXTUREFORMAT_DEPTH16,\r\n            GIRSMManager.GeometryBufferTextureTypesAndFormats\r\n        );\r\n\r\n        if (!geometryBufferRenderer) {\r\n            throw new Error(\"Geometry buffer renderer is not supported but is required for GIRSMManager.\");\r\n        }\r\n\r\n        geometryBufferRenderer.enablePosition = true;\r\n        if (!this._geomBufferEnabled) {\r\n            geometryBufferRenderer.generateNormalsInWorldSpace = true;\r\n        }\r\n\r\n        const decodeGeometryBufferNormals = geometryBufferRenderer.normalsAreUnsigned;\r\n        const normalsAreInWorldSpace = geometryBufferRenderer.generateNormalsInWorldSpace;\r\n\r\n        this._counters.push({ name: \"Geometry buffer renderer\", value: 0 });\r\n        this._countersRTW.push([this._scene.geometryBufferRenderer!.getGBuffer().renderTarget!]);\r\n\r\n        let defines = \"\";\r\n        if (decodeGeometryBufferNormals) {\r\n            defines += \"#define DECODE_NORMAL\\n\";\r\n        }\r\n        if (!normalsAreInWorldSpace) {\r","sourceCodeStart":580,"sourceCodeEnd":616,"githubUrl":"https://github.com/BabylonJS/Babylon.js/blob/0592b347b8a4ee0236089ea86a749cacfdb266d8/packages/dev/core/src/Rendering/GlobalIllumination/giRSMManager.pure.ts#L580-L616","documentation":"GIRSMManager relies on the geometry buffer renderer (GBuffer) to capture position/normal data for global illumination. If the renderer reports it is unsupported (e.g. `isSupported` false on the engine/extension), `_createPostProcesses` throws because RSM cannot function without the GBuffer.","triggerScenarios":"`GIRSMManager._createPostProcesses` (invoked via recreateResources) calls `new PrePassRenderer`-based geometry buffer creation which returns null when the engine/hardware does not support the required render-target features (e.g. multiple render targets, float textures).","commonSituations":"Running on hardware or a WebGL/WebGPU context lacking MRT or depth-texture support; using a thin engine/backend without the geometry buffer renderer extension; old devices or software renderers.","solutions":["Check `engine._features` / geometry-buffer-renderer support (`PrePassRenderer.IsSupported(engine)` or equivalent) before instantiating GIRSMManager and show a fallback","Upgrade to a browser/GPU that supports the required MRT and float depth formats","Switch the GI technique (e.g. use a different GI approach or disable GIRSM) on unsupported hardware","Verify engine creation (WebGL2 vs WebGL1) — WebGL1 lacks required MRT features"],"exampleFix":"// before\nconst girlManager = new GIRSMManager(scene); // may throw on unsupported engines\n// after\nif (PrePassRenderer.IsSupported(scene.getEngine())) {\n  const giManager = new GIRSMManager(scene);\n} else {\n  console.warn(\"GIRSM unsupported on this engine; using fallback lighting\");\n}","handlingStrategy":"fallback","validationCode":"if (!PrePassRenderer.IsSupported(scene.getEngine())) {\n  console.warn('GIRSM not supported on this engine/hardware; using fallback lighting');\n} else {\n  const giManager = new GIRSMManager(scene);\n}","typeGuard":"function supportsGIRSM(scene: BABYLON.Scene): boolean {\n  return BABYLON.PrePassRenderer.IsSupported(scene.getEngine());\n}","tryCatchPattern":"try {\n  const giManager = new GIRSMManager(scene);\n} catch (e) {\n  if (e.message.includes('Geometry buffer renderer is not supported')) {\n    // fall back to standard lighting pipeline\n  }\n}","preventionTips":["Check PrePassRenderer/geometry-buffer support before enabling GI features","Target WebGL2/WebGPU backends; avoid WebGL1 for GIRSM","Provide a non-GI lighting fallback for low-end devices"],"tags":["rendering","global-illumination","unsupported-hardware","babylonjs"],"backgroundTag":"feature-not-supported","analyzedSha":"0592b347b8a4ee0236089ea86a749cacfdb266d8","analyzedAt":"2026-08-30T15:11:20.442Z","schemaVersion":2},"datasetVersion":"2026-08-30T18:17:15.746Z"}