Skip to main content

Velaptor Release v1.0.0-preview.44

· 4 min read
Calvin Wilkinson
Creator and Maintainer of Velaptor (and other projects)

Welcome to another release of Velaptor! 🎉

It's been a while since our last release blog post, and we're thrilled to share some game-changing updates that will make your development experience smoother and more efficient.

RELEASE Notes

You can view the release notes here.

Intro

This release is all about revamping content management—the backbone of any game. While the previous system worked, it had performance and scalability limitations that we knew needed addressing. We've completely reimagined how content loading works to give you a faster, cleaner, and more intuitive experience.

Ready to dive in? Let's explore what's new!

Why The Change?

Content management isn't just a feature—it's the foundation of game development. Poor content loading can create friction at every level: players wait longer, developers write more boilerplate, and performance suffers.

We realized the old system was creating unnecessary overhead. Every scene and game object required repetitive code just to load basic assets. Multiply that across a large project, and you're looking at wasted time, increased complexity, and potential performance bottlenecks.

The goal? Make content loading invisible—so fast and intuitive that you barely think about it.

The Old Way

Previously, loading content required the ContentLoaderFactory class. You'd create a factory, instantiate separate loaders for each content type (textures, fonts, sounds, atlases), and then finally load your assets.

The problem? Boilerplate everywhere. Since virtually every game uses all four content types, every scene and game object needed this repetitive setup code.

protected override void OnLoad()
{
// Loading textures
var textureLoader = ContentLoaderFactory.CreateTextureLoader();
var texture = textureLoader.Load("velaptor-logo");

// Loading audio
var audioLoader = ContentLoaderFactory.CreateAudioLoader();
var audio = audioLoader.Load("ice-beam");

// Loading atlases
var atlasLoader = ContentLoaderFactory.CreateAtlasLoader();
var atlas = atlasLoader.Load("level-1-atlas");

// Loading fonts
var fontLoader = ContentLoaderFactory.CreateFontLoader();
var font = fontLoader.Load("Arial");
}

There had to be a better way—and now there is!

The New Way

Say goodbye to factories and multiple loaders. No you use the new ContentManager class!

Create a single ContentManager instance (it's a singleton, so feel free to instantiate it anywhere with zero performance cost), and use it to load any content type. Simple, clean, and consistent.

Loading Textures:

// Create anywhere!
var contentManager = ContentManager().Create();

// Textures
var myTexture = contentManager.Load<ITexture>("path/to/my-texture.png");

Loading Atlas Textures:

// ...

// Atlas
var myAtlas = contentManager.Load<IAtlasData>("path/to/my-atlas.json");

Loading Audio:

// ...

// Audio
// Loading audio with default buffer type of 'Full'
var myAudio = contentManager.Load<IAudio>("path/to/my-audio.ogg");

// Loading audio with control over the buffer type.
var myAudio = contentManager.LoadAudio("path/to/my-audio.mp3", AudioBuffer.Stream);

Loading Fonts:

// ...

// Fonts
// Loading font with default size of 12
var myFont = contentManager.Load<IFont>("path/to/my-font.ttf");

// Loading font with control over the font size
var myFont = contentManager.LoadFont("path/to/my-font.ttf", 24);

That's it! Cleaner code, fewer dependencies, and a more intuitive API. Load what you need, when you need it.

Performance Wins

Beyond the cleaner API, this refactor brings tangible performance improvements:

  • Reduced GC pressure: The old system embedded metadata (like font size and audio buffer type) in cache keys, requiring constant parsing. That's gone now.
  • Lower complexity: Special handling for fonts and audio is eliminated, streamlining the loading pipeline.
  • Better scalability: As your game grows, the new system scales more efficiently.

And we're not done yet! Remember, Velaptor is still in preview. We're actively refining the API and building toward a rock-solid 1.0.0 release. Expect even more content management improvements in future updates.

Cross-Platform Improvements

We've also enhanced cross-platform compatibility by improving path handling. Several known path-related issues that weren't fully cross-platform compatible have been addressed, making your game more portable across Windows, macOS, and Linux.

Breaking Changes

⚠️ Heads up! This release includes breaking changes. While we've worked to minimize disruption, the new content management system requires some code updates. Check the release notes for a complete list of breaking changes and migration guidance.

Join Our Community

We believe that everyone has something unique to offer, and we invite you to contribute to Velaptor and the KinsonDigital organization.

Interested?
Open for more information
  1. Contribute Your Skills: Whether you're a seasoned developer or just starting, your unique skills can truly make a difference. Your power to contribute is immense, and you can do so by:

    • Picking up issues and submitting pull requests with code improvements, bug fixes, or new features.
    • Providing feedback, reporting issues, or suggesting enhancements through GitHub issues.
  2. Support Us Financially: Consider supporting us financially if you can. Your contributions can help us cover expenses like hosting and infrastructure costs, and support the ongoing development and maintenance of all KinsonDigital projects. You can donate or sponsor us on:

Remember, every contribution, no matter how small, is valuable and appreciated. By contributing, you're not just helping us; you're helping the entire community by making game development better and more efficient. Join us on this and be involved in making something amazing and unique together!