Vixen
02b45cc4
csharp
public sealed class ContentCatalog

The index a build produces and the runtime reads: address in, chunk out.

No guide page documents this yet — the page shows what the code says about itself.

Remarks

Everything downstream of the content build is a lookup in here. A game asks for ui/textures/hero; the catalog says which chunk that is, which bundle holds it, whether that bundle is on the device or has to be downloaded first, and what else has to be loaded alongside it. Without the catalog an address is just a string.

It is immutable, and that is what makes the remote update story work. A shipped application carries a local catalog; a content update publishes a remote one; the runtime merges the second over the first and gets a third. Nothing is mutated, so a half-applied update cannot exist — either the merge produced a catalog or the old one is still in use. See MergedWith.

Addresses are not paths. They are slash-separated by convention because that is what people type, and Match globs over them, but nothing here resolves .., normalises case or touches a filesystem. An address is a name a build chose.

Fields and properties (7)

  • public int Version

    The catalog format's version, so an old runtime refuses a new file rather than misreading it.

  • public ObjectId BuildHash

    What the build hashed to. Two catalogs with the same value describe the same content.

  • public string Target

    Which target this was built for — Windows, Android/Vulkan.

  • public IReadOnlyCollection<CatalogEntry> Entries

    Every entry, in address order.

  • public IReadOnlyCollection<CatalogBundle> Bundles

    Every bundle.

  • public IReadOnlyCollection<string> Labels

    Every label that anything carries.

  • public int Count

    How many addresses there are.

Methods (13)

  • public ContentCatalog(int version, ObjectId buildHash, string target, IEnumerable<CatalogEntry> entries, IEnumerable<CatalogBundle> bundles)

    Builds a catalog.

  • public bool TryGet(string address, out CatalogEntry entry)

    Finds one address.

  • public bool TryGetAddress(AssetReference reference, out string address)

    What address answers a vx: reference.

  • public bool TryGetAddress(AssetId asset, out string address)

    What address answers an asset's main object.

  • public bool TryGetBundle(string name, out CatalogBundle bundle)

    Finds the bundle an entry names.

  • public ImmutableArray<string> ByLabel(string label)

    Every address carrying a label, in address order.

  • public ImmutableArray<string> Match(string pattern)

    Every address matching a glob, in address order.

  • public ImmutableArray<string> Closure(params ReadOnlySpan<string> addresses)

    Everything that has to be loaded for an address to be usable, the address itself included, in dependency-first order.

  • public ContentCatalog MergedWith(ContentCatalog update)

    A catalog with another laid over it: the remote update applied to what shipped.

  • public static bool Matches(string address, string pattern)

    Whether an address matches a glob.

  • public long DownloadSize(IEnumerable<string> addresses, Func<CatalogBundle, bool>? isCached = null)

    How many bytes would have to be downloaded to make an address loadable.

  • public ImmutableArray<CatalogBundle> RemoteBundlesFor(IEnumerable<string> addresses)

    Every remote bundle that has to be present before some addresses can load.

  • public CatalogEntry Get(string address)

    Finds the entry for an address, or says which one is missing.

Used by (38)

  • ContentAddressablesRemote
  • GameModelsThirdPersonShooter
  • PlayerRigThirdPersonShooter
  • ProgramAddressablesRemote
  • AssetManagerVixen.Assets
  • AssetMaterialSourceTestsVixen.Engine.Renderer.Tests
  • AssetTextureSourceTestsVixen.Engine.Renderer.Tests
  • CatalogFormatVixen.Assets
  • CatalogFormatTestsVixen.Assets.Tests
  • CatalogReferenceTestsVixen.Assets.Tests
  • ClaimResolverVixen.Assets
  • CompositorContentTestsVixen.Assets.Tests
  • ContentCatalogExtensionsVixen.Assets
  • ContentCatalogTestsVixen.Assets.Tests
  • ContentMountVixen.App.Hosting
  • ContentUpdateVixen.Assets
  • ContentUpdateResultVixen.Assets
  • LooseContentSourceVixen.Assets
  • ReferenceWorldVixen.Assets.Tests
  • RemoteContentTestsVixen.Assets.Tests
  • RemoteWorldVixen.Assets.Tests
  • StreamedContentTestsVixen.Assets.Tests
  • UpdateWorldVixen.Assets.Tests
  • VixenApplicationVixen.App.Hosting
  • WorldVixen.Assets.Tests
  • WorldRendererTestsVixen.Engine.Renderer.Tests
  • BuildPlannerTestsVixen.Editor.Assets.Tests
  • ContentBuildResultVixen.Editor.Assets
  • ContentBuilderVixen.Editor.Assets
  • ContentBuilderTestsVixen.Editor.Assets.Tests
  • ContentMountTestsVixen.App.Tests
  • DoctorRunnerVixen.Cli
  • LooseContentVixen.Editor.Assets
  • LooseContentTestsVixen.Editor.Assets.Tests
  • RemoteContentMountTestsVixen.App.Tests
  • SceneManifestTestsVixen.Editor.Assets.Tests
  • StartupSceneTestsVixen.App.Tests
  • VixenCommandTestsVixen.Cli.Tests