FAQ

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.

← Getting Started