19 Jan 2007

Nebula3 Foundation Layer Overview

The Nebula3 Foundation Layer provides common platform abstraction services below rendering and audio. It's the lowest layer in the Nebula3 layer model and can be used on its own for applications which require an easy to use low level framework but don't need to do 3d rendering.

The Foundation Layer is already pretty much finished, with a complete set of test classes and performance benchmark classes.

The Foundation Layer consists of the following subsystems:
  • Core: this implements the basic Nebula3 object model, with support for ref-counting, smart pointers, RTTI and creating objects by class name or a class FourCC identifier.
  • Memory: provides memory management and wrapper functions.
  • Util: a collection of utility classes, mainly different types of containers, a powerful string class, a guid wrapper class and so on...
  • Timing: this subsystem offers classes for measuring time and profiling.
  • IO: An all-new powerful IO subsystem, inspired by the .NET IO framework. IO-Resources are identified by URIs, stream classes provide generic data channels, and stream readers/writers offer specialized access to streams.
  • Threading: provides low-level wrapper classes for multithreading
  • Messaging: This is an improved version of Mangalore's messaging subsystem. Messages are a standardized way to communicate between objects in the same thread, between threads, or between applications on the same machine or across a network.
  • Math: A standalone vector math library. The idea here is to make math code look much like HLSL shader code, and provide the highest performance possible across different platforms and compilers.
  • Net: The low-level networking subsystem. Provides wrapper classes for sockets, IP addresses, a simple generic client/server system, and basic HTTP support (for instance a HTTP stream class, making transparent IO over HTTP possible).
  • Scripting: Nebula3's scripting subsystem is much less obscure then Nebula2's, and easier to extend. The standard scripting language is now LUA (as compared to TCL in Nebula2), reducing the memory footprint drastically. Scripting is now no longer tied into the architecture. It is easy to disable scripting all together and reduce the memory footprint even more. It's still possible to add support for other scripting languages in Nebula3.
  • Attr: Implements the concept of dynamic attributes from Mangalore. Attributes are compile-safe key/value pairs, thus offering compile-time validation of attribute names and data types. Attributes are the foundation for the database subsystem.
  • Db: The database subsystem is an improved version of Mangalore's database subsystem, offering an abstract, performance-optimized interface to a SQL database for storing all types of application data. The standard implementation uses SQLite as its database backend, the wrapper code has been carefully tuned for best database performance.
  • Naming: Implements a hierarchical naming service for Nebula3 objects. Naming is no longer hard-coded into the base class, instead objects can be registered with the naming service at runtime, adding the additional overhead only when needed.

3 comments:

Eric said...

Wow sounds all very promising!! :]

In wich layer will audio occur? And what about loading recources? Is that about memory or net?

And what is RTTI?!? FourCC had a link. You know I'm a lousy programming-n00b ;P

Eric said...

and btw: am I the only one that knows about that blog yet?

Floh said...

Audio will be handled in Render Layer, above the Foundation Layer. Resource management (where resources are textures, sound files, 3d models, etc...) will also go into the Render Layer. RTTI means runtime type information, I have added a Wikipedia link to this as well :)