stride3d/stride · error · NullReferenceException

RenderView is null. Please make sure you have your camera…

Error message

RenderView is null. Please make sure you have your camera correctly set.

What it means

ForwardRenderer.CollectCore throws NullReferenceException when context.RenderView is null at the start of the collect pass. RenderView is set up by the camera/camera-slot pipeline; a null view means no camera was bound for this render, so there is nothing to render from. The message explicitly points to camera configuration as the cause.

Solutions

  1. Ensure the scene has an enabled Entity with a CameraComponent and its Slot matches a slot defined in the GraphicsCompositor's camera list.
  2. Check GraphicsCompositor.Cameras contains an entry and that Context.RenderView / camera slot is registered (CameraComponent.Slot = sceneSystem.GraphicsCompositor.Cameras[0].ToSlotId()).
  3. Verify no code disables/removes the camera before rendering; null-check context.GetCurrentCamera() in custom pipeline code.
  4. Wrap game startup so the compositor is configured before the first render frame (e.g. correct SceneSystem setup in GameBase).

Example fix

// before
// no camera bound; ForwardRenderer throws
// after
var cameraEntity = new Entity { new CameraComponent(Slot) };
SceneSystem.SceneInstance.RootScene.Entities.Add(cameraEntity);
Defensive patterns

Strategy: validation

Validate before calling

bool isRenderable(GraphicsContext context) => context.RenderView != null && context.GetCurrentCamera() != null;

Type guard

bool HasActiveCamera(SceneInstance s) => s != null && s.Entities.Any(e => e.Enable && e.Get<CameraComponent>() != null);

Try / catch

try { sceneSystem.Render(...); } catch (NullReferenceException ex) when (ex.Message.Contains("RenderView")) { log.Error("No camera bound to a slot in the GraphicsCompositor."); }

Prevention

When it happens

Trigger: Running the rendering pipeline (SceneRenderer/graphics compositor containing ForwardRenderer) with no camera assigned to the current camera slot, CameraComponent disabled or missing, or context.GetCurrentCamera() returning a camera that never produced a RenderView.

Common situations: Forgetting to add a CameraComponent or forgetting to set its Slot in a new scene; a camera slot ID mismatch between CameraComponent.Slot and GraphicsCompositor cameras; deleting the camera at runtime while frames keep rendering.

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.

Related errors


AI-assisted analysis of stride3d/stride@96fad776d2 (2026-09-14). Data as JSON: /api/errors/ec324c995ada40ca. Report an issue: GitHub.

Appendix: source

Thrown at sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs:300

            if (TransparentRenderStage != null)
            {
                context.RenderView.RenderStages.Add(TransparentRenderStage);
            }

            if (GBufferRenderStage != null && LightProbes)
            {
                context.RenderView.RenderStages.Add(GBufferRenderStage);
            }
        }

        protected override unsafe void CollectCore(RenderContext context)
        {
            using var _ = Profiler.Begin(CollectCoreKey);

            var camera = context.GetCurrentCamera();

            if (context.RenderView == null)
                throw new NullReferenceException(nameof(context.RenderView) + " is null. Please make sure you have your camera correctly set.");

            // Setup pixel formats for RenderStage
            using (context.SaveRenderOutputAndRestore())
            {
                // Mark this view as requiring shadows
                shadowMapRenderer?.RenderViewsWithShadows.Add(context.RenderView);

                context.RenderOutput = new RenderOutputDescription(PostEffects != null ? PixelFormat.R16G16B16A16_Float : context.RenderOutput.RenderTargetFormat0, DepthBufferFormat, MSAALevel);

                CollectStages(context);

                if (VRSettings.Enabled && VRSettings.VRDevice != null)
                {
                    Vector3 cameraPos, cameraScale;
                    Matrix cameraRot;

                    if (!vrSystem.PreviousUseCustomViewMatrix)
                    {

View on GitHub (pinned to 96fad776d2)