Axis architecture
The engine consists of a core and various modules, which automatically attach to the core at runtime. The host application interacts only with the core and remains totally unbiased by the attached modules. Each module can contain one or more of the following components:
- Image format encoders and/or decoders
- Sound format encoders and/or decoders
- 3D scene format encoders and/or decoders
- Graphics device
- Audio device
- Input device
- File system
For example, Axis natively supports opening of .3ds, .obj, .mtl and .axs scene formats. To add support for .fbx format too, you only need to have the AxModuleFbx.dll copied in your application folder.
This approach has several gains:
- Allows the core to be independent from third party libraries
- Reduces the code by separating it into small logically independent parts
- Creates simple, well classified, universal models for working with different types of media
- Makes building of a module a task which requires falmiliarity with only the relevant parts of the engine
- Allows the engine to work naturally with custom, user-created modules
- Allows applications which use the engine, to use all of the media that the engine supports or will support in future - for example, a game built now, will be able to work with, say, DirectX 15 whenever it comes to existence, or an application that uses the physical file system can without effort be made to use a virtual file system contained within an archive or remotely via stream, if provided with the respective module
The layered shading model, which will be discussed in another article, allows currently built games not only to work on, but to actually take advantage of the new features of future hardware and devices.