{"record":{"id":"154bdc376fdb98fa","repo":"BabylonJS/Babylon.js","slug":"active-camera-not-set-154bdc","errorCode":null,"errorMessage":"Active camera not set","messagePattern":"Active camera not set","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/dev/core/src/scene.pure.ts","lineNumber":5032,"sourceCode":"    }\r\n\r\n    /** @internal */\r\n    public _allowPostProcessClearColor = true;\r\n    /**\r\n     * @internal\r\n     */\r\n    public _renderForCamera(camera: Camera, rigParent?: Camera, bindFrameBuffer = true): void {\r\n        if (camera && camera._skipRendering) {\r\n            return;\r\n        }\r\n\r\n        const engine = this._engine;\r\n\r\n        // Use _activeCamera instead of activeCamera to avoid onActiveCameraChanged\r\n        this._activeCamera = camera;\r\n\r\n        if (!this.activeCamera) {\r\n            throw new Error(\"Active camera not set\");\r\n        }\r\n\r\n        // Viewport\r\n        engine.setViewport(this.activeCamera.viewport);\r\n\r\n        // Camera\r\n        this.resetCachedMaterial();\r\n        this._renderId++;\r\n\r\n        if (!this.prePass && bindFrameBuffer) {\r\n            let skipInitialClear = true;\r\n            if (camera._renderingMultiview && camera.outputRenderTarget) {\r\n                skipInitialClear = camera.outputRenderTarget.skipInitialClear;\r\n                if (this.autoClear) {\r\n                    this._defaultFrameBufferCleared = false;\r\n                    camera.outputRenderTarget.skipInitialClear = false;\r\n                }\r\n            }\r","sourceCodeStart":5014,"sourceCodeEnd":5050,"githubUrl":"https://github.com/BabylonJS/Babylon.js/blob/0592b347b8a4ee0236089ea86a749cacfdb266d8/packages/dev/core/src/scene.pure.ts#L5014-L5050","documentation":"This code path (camera-dependent render, e.g. setActiveCamera / _renderForCamera family) assigns the given camera to _activeCamera and then asserts that scene.activeCamera is readable. If the assignment left activeCamera null/undefined (camera was null, or was disposed/rejected), the scene cannot compute a viewport or view matrix, so it throws.","triggerScenarios":"Passing null/undefined (or an already-disposed camera) into the camera render/set API on Scene, so this._activeCamera = camera results in this.activeCamera being falsy immediately after assignment.","commonSituations":"A camera was disposed elsewhere but a reference is still passed to render; camera variable lost by refactoring; calling render with no camera ever created in the scene.","solutions":["Ensure a valid Camera is created (new FreeCamera/ArcRotateCamera + scene.activeCamera = camera) before rendering","Check that the camera passed in is not null or already disposed (camera.isDisposed)","Re-attach the camera if it was disposed, or create a replacement default camera","Guard the render call behind a check that scene.activeCamera is set"],"exampleFix":"// before\nscene.render(); // camera never assigned or was disposed\n// after\nif (!scene.activeCamera || scene.activeCamera.isDisposed()) {\n    scene.activeCamera = new ArcRotateCamera('cam', 0, 0, 10, Vector3.Zero(), scene);\n}\nscene.render();","handlingStrategy":"validation","validationCode":"function canRenderWithCamera(scene: BABYLON.Scene, camera?: BABYLON.Camera | null): boolean {\n  return !!camera && !camera.isDisposed() && (camera.getScene() === scene);\n}\n// call scene render APIs only if canRenderWithCamera(scene, myCamera)","typeGuard":"function isValidCamera(c: unknown): c is BABYLON.Camera {\n  return !!c && typeof c === 'object' && 'viewport' in c && !(c as BABYLON.Camera).isDisposed();\n}","tryCatchPattern":"try {\n  scene.setActiveCamera?.(camera) ?? renderPass(camera);\n} catch (e) {\n  if (e instanceof Error && e.message === 'Active camera not set') {\n    camera = createDefaultCamera(scene);\n    scene.activeCamera = camera;\n  } else { throw e; }\n}","preventionTips":["Always create and assign a camera before the first scene.render()","Check camera.isDisposed() after disposing cameras elsewhere in the app","Never pass a nullable camera variable straight into render APIs without a null check","Re-assign scene.activeCamera whenever you dispose or detach cameras"],"tags":["babylonjs","camera","scene","null-reference"],"backgroundTag":"active-camera-not-set","analyzedSha":"0592b347b8a4ee0236089ea86a749cacfdb266d8","analyzedAt":"2026-08-30T15:11:20.442Z","schemaVersion":2},"datasetVersion":"2026-08-30T18:17:15.746Z"}