Architecture

Last updated 2 months ago

The core of the engine is coded in C++, which also determines the native C++ API. JavaScript binding is also available , which gives You the opportunity to real-time “live code” your scenes through a JavaScript console, while You are inside the 3D scene.

Core

The core of the engine is very sleek, so it can run on any device (desktop, notebook, tablet, mobile phone, even Raspberry Pi). It consists of core modules (shared libraries) which provide base functionality like managing scene, network-synchronization, configuration-, event-, log- and plugin-handling.

System

This core module takes care of the initialization process in ApertusVR. It starts all core modules like Scene, SystemConfig, EventManager, etc. ApertusVR can be started from any program calling System's Start() method.

SystemConfig

This module loads ApeSystem.json, which contains configuration settings for the System core module. For more details, please check the Configuration Ecosystem page.

SceneManager

This is the database where 3D scene elements (nodes and entities) are live. It implements the base APE types ie. Node, Light, Camera, etc. It also responsible for network synchronization between participants.

EventManager

EventManager is handling Events in ApertusVR. An event can be a creation of a geometry or a change in the position of a node. Plugins are able to subscribe for these events.

An Ape::Event holds information only about: - SubjectName (the unique name of the node, entity, etc.) - Type of the event (NODE_CREATE, CAMERA_FRUSTUMOFFSET, etc.) - Group of the event (node, geometry, light, camera, etc.)

LogManager

Logging is a very basic functionality for any kind of application. It provides logging levels like info, debug, trace, warning and error.

PluginManager

Apertus' plugins are handled by this module. It creates a new thread for each plugin and takes care of their life-cycle.

MainWindow

Plugins

Plugins are extending the functionality of the Core, according to your needs/choice. Plugins do not know anything about any other plugin, they only use Apertus interfaces.