stride3d/stride · error · ContentStreamingException

Missing content storage.

Error message

Missing content storage.

What it means

To stream a texture, Stride reads mip data from the content storage container referenced by the asset's ContentStorageHeader. CreateStreamingTexture calls ContentStreaming.GetStorage; if it returns null the storage container behind the texture asset is unavailable, and a ContentStreamingException("Missing content storage.") is thrown because streaming cannot proceed without it.

Solutions

  1. Recompile/re-import the texture asset so streaming data and its storage container are emitted
  2. Verify the database file provider is configured and the raw content storage files exist next to the compiled assets
  3. Disable texture streaming for that texture (remove streaming flags / use a non-streaming Texture load) if storage is not available
  4. Check that ContentStreaming.GetStorage inputs (storageHeader) are intact — don't strip headers when copying assets

Example fix

// before
var texture = Content.Load<Texture>("tex", StreamingFlags); // storage files missing
// after
// re-import asset with streaming data, or:
var texture = Content.Load<Texture>("tex", Content.ContentManagerOptions.ForceKeepRaw); // non-streaming path
Defensive patterns

Strategy: validation

Validate before calling

var storage = ContentStreaming.GetStorage(ref storageHeader);
if (storage == null)
{
    // fall back to non-streaming load
    return Content.Load<Texture>(url);
}

Try / catch

try
{
    streamingManager.RegisterTexture(texture, description);
}
catch (ContentStreamingException)
{
    Logger.Warning("Streaming storage missing; loading texture without streaming");
}

Prevention

When it happens

Trigger: RegisterTexture/CreateStreamingTexture receiving a Texture whose image was built without a valid ContentStorageHeader — e.g. textures loaded outside the database file provider, compiled without streaming data, or with the storage file deleted/moved.

Common situations: Enabling texture streaming for assets compiled in a mode that did not emit streaming chunks; running content on a machine where the raw data files (.bin chunks) are missing; loading textures via a provider that has no access to the streaming storage.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at sources/engine/Stride.Rendering/Streaming/StreamingManager.cs:342

            Debug.Assert(resource != null, "resource != null");

            lock (resources)
            {
                Debug.Assert(resources.Contains(resource), "resources.Contains(resource)");

                resources.Remove(resource);
                resourcesLookup.TryRemove(resource.Resource, out _);
                activeStreaming.Remove(resource);
            }
        }

        private StreamingTexture CreateStreamingTexture(Texture obj, ref ImageDescription imageDescription, ref ContentStorageHeader storageHeader)
        {
            // Get content storage container
            var storage = ContentStreaming.GetStorage(ref storageHeader);
            if (storage == null)
                throw new ContentStreamingException("Missing content storage.");

            // Find resource or create new
            var resource = Get(obj);
            if (resource == null)
            {
                resource = new StreamingTexture(this, obj);
                RegisterResource(resource);
            }

            // Update resource storage/description information (may be modified on asset rebuilding)
            resource.Init(Services.GetSafeServiceAs<IDatabaseFileProviderService>(), storage, ref imageDescription);

            // Check if cannot use streaming
            if (!Enabled)
            {
                FullyLoadResource(resource);
            }

View on GitHub (pinned to 96fad776d2)