Frequently Asked Questions
Common questions about Nova-3D, its architecture, and its relationship to other projects.
General
What is Nova-3D?
Nova-3D is an experimental C++ 3D engine with a clean public API inspired by Urho3D. It is in early prototype stage: a working 3D demo exists, but many engine systems are not yet built. It is a long-term personal project, not production-ready software.
Can I use Nova-3D for a real game?
Not yet. Nova-3D is in prototype stage. The API will change, features are missing, and there is no stability guarantee. Follow the GitHub repository and check back when the project reaches a more mature phase.
Is Nova-3D a fork or clone of Urho3D?
No. Nova-3D is an original project inspired by Urho3D's API style. The internal implementation is entirely different — Nova-3D uses CNA (a C++ XNA 4.0 reimplementation) as its internal rendering layer, not Urho3D's internals. The public API follows Urho3D conventions as a design reference, but no Urho3D code is copied.
Is Nova-3D related to XNA or MonoGame?
Not directly. Nova-3D uses CNA internally — CNA is a C++ reimplementation of the XNA 4.0 API. But CNA is a hidden internal layer. Nova-3D's public API has no XNA concepts. From the outside, Nova-3D looks like a small Urho3D-style engine, not an XNA framework.
Architecture
What is CNA?
CNA is a C++ reimplementation of the Microsoft XNA 4.0 API. It provides graphics, audio, input, and content APIs at the XNA level. CNA is a private internal dependency of Nova-3D — it is never exposed through the Nova-3D public API and is not part of Nova-3D's public identity.
What is sharp-runtime?
sharp-runtime is a .NET-inspired utility library in C++: collections, string types, and runtime support helpers. Like CNA, it is a private internal dependency of Nova-3D and is never visible to application code.
Why use CNA internally instead of calling OpenGL directly?
CNA provides a higher-level abstraction over the graphics backend that makes the Nova-3D internal adapter cleaner to write. It also allows the internal layer to be swapped in the future without changing the Nova-3D public API. The Nova-3D → CNA → EasyGL/OpenGL layering is intentional.
Will CNA or sharp-runtime ever be exposed in the public API?
No. This is a strict architectural rule. Nova-3D public headers must never include CNA, sharp-runtime, EasyGL, or any backend types. If you are writing a Nova-3D application, you will never encounter CNA types.
Why is the API inspired by Urho3D?
Urho3D has a clean, practical engine API that balances simplicity with power. It is a proven model for a C++ game engine API. By aligning Nova-3D's public API with Urho3D conventions, developers familiar with Urho3D can onboard quickly, and the design decisions are grounded in a real-world reference rather than invented from scratch.
Building
The build fails — what should I check?
- Make sure CNA and sharp-runtime sibling repositories are checked out at the correct relative paths
- Verify CMake version is 3.21 or later
- Verify your compiler supports C++23
- Verify SDL3 development libraries are installed
- Check the open issues on GitHub for known build problems
Does Nova-3D support 32-bit builds?
Only 64-bit builds are tested. 32-bit may work but is not supported.
Contributing
How can I contribute?
The best contributions right now are bug reports, build failure reports, and API design feedback. Open an issue on GitHub. Before submitting a large code change, open an issue to discuss the approach — the architecture boundaries are intentional.
Can I add new public API methods?
New public API additions should follow Urho3D-style conventions. If a method doesn't exist in Urho3D-style engines, it probably belongs as an internal helper, not a public API method. Open an issue to discuss before implementing.