Urho3D consists of several static libraries that are independent where possible: for example the Graphics library could be used without the Engine library, if only rendering capabilities were desired.
The libraries are the following:
- Container. Provides STL replacement classes and shared pointers.
- Math. Provides vector & quaternion types and geometric shapes used in intersection tests.
- Core. Provides the execution Context, the base class Object for typed objects, object factories, event handling, threading and profiling.
- IO. Provides file system access, stream input/output and logging.
- Resource. Provides the ResourceCache and the base resource types, including XML documents.
- Scene. Provides Node and Component classes, from which Urho3D scenes are built.
- Graphics. Provides application window handling and 3D rendering capabilities.
- Input. Provides mouse & keyboard input in both polled and event-based mode.
- Network. Provides client-server networking functionality.
- Audio. Provides the audio subsystem and playback of .wav & .ogg sounds in either 2D or 3D.
- UI. Provides a 2D graphical user interface.
- Physics. Provides physics simulation.
- Script. Provides scripting support using the AngelScript language.
- Engine. Instantiates the subsystems from the libraries above, and manages the main loop iteration.
Urho3D.exe uses the Engine & Script libraries to start up the subsystems and to load the script file specified on the command line; however all of the libraries above get automatically linked as Engine library depends on all of them.
Although Urho3D.exe itself is geared towards running a scripted application, it is also possible to use the engine through C++ only. When the scripting subsystem initialization is completely skipped, the resulting executable will also be significantly smaller.
The third-party libraries are used for the following functionality:
- AngelScript: scripting language implementation
- Bullet: physics simulation implementation
- FreeType: font rendering
- GLee: OpenGL extensions handling
- kNet: UDP networking
- libcpuid: CPU properties detection
- MojoShader: parsing HLSL bytecode after shader compilation
- Open Asset Import Library: reading various 3D file formats
- pugixml: parsing XML files
- SDL: window and OpenGL context creation, input and sound output
- StanHull: convex hull generation from triangle meshes, used for physics collision shapes
- stb_image: image loading
- stb_vorbis: Ogg Vorbis decoding