C++ Unified Abstraction Library
Quantum Leap
A library imitating low-level brain communication + other additional functionalities
Role
Idea, Code
Tags
Programming C++ CMake Vulkan OpenCL
Latest Supported Language Standard: C++14
The source code is private for now
Framework Goals
Why reinvent the wheel and replace parts of the standard library and Qt?
- the whole idea is to implement everything as a host and compute devices for parallelism, deprecating OpenGL, DirectX, VA, VDPAU, OVD, XVideo, TrueAudio and OpenAL completely.
- behaviour-based device processing and explicit events
So the real question is: Why would you want to have all these libraries when OpenCL is pushing hard and you can program it pretty much like a regular CPU? It’s just a matter of time until OpenCL evolves and turns into an all-in-one standard.
March 6th 2015: Well,… it evolved into Vulkan (GLNext, based on Mantle), however OpenCL still remains as a new revision was released (2.1). Both are using a common IL - SPIR-V.
Concept & Interface Goals
- A library imitating low-level brain communication system
- Focus on parallel execution model (and not on the compute backends)
- Constructive self-registering interfaces
Technical Specifications
Host
- plugins (Done)
- utilities (Done)
- cross-platform process management and interprocess communication (~60%)
- query hardware and os information (Done)
Compute
- use concurrency as fallback host implementation (Done)
- specialized device & shared memory allocators (~80%)
- unified memory management & allocator patterns (~90%)
- host/device out-of-order and continuation tasks (~50%)
- use Vulkan & OpenCL as SINGLE SOURCE backends (SPIR-V is required to implement eventual C++ interpreter) (~40%)
- behaviour-based device scheduling and manipulation (WIP)
- branched device tasks (WIP)
Active Model View Controller (UniFace)
- node based + smart pointer
- the model not only contains data but also logic
- a logic node can be bound to single or multiple data nodes
- cyclic binding (actually the idea is to ABUSE it)
- can generate multiple model repositories
- interprocess interface
- the interface is protocol agnostic (can exchange data across networks)
- controllers are represented as signal structures + configuration data to interact with a model’s logic
- constructive plugin interface that self-registers metadata and functions
- the interface knows about all its functionality as if it was predefined
- the whole interdependent pattern can be used to form a universal communication system for almost any type of program
- can generate user interfaces on the fly using layout data
Network
- implementation of the C++17 network library (~80%)
- simplified packet exchange (Done)
- layered protocol interface (~30%)
- http, https, ftp, bittorrent protocols
Universal Database Interface
- based on AMVC
- standard & relational database model extension
- DOM model extension
Input
- specialized raw input queues (WIP)
- integrated security
- all types of keyboards
- all types of mice
- generic controller interface & support
- wheel controller
- Xbox 360/One controller
- Playstation 1/2/4 controller
- Steam controller
- extended button layouts
- touch surfaces
Graphics
- unified surface management (WIP)
- gfx algorithms based on compute library (WIP)
- abstract draw objects
- scene graph
- 2D images and icons
- 3D images
- cross-platform font texture generator (WIP)
- color management and post-processing
User Interface
- display management (Done)
- window adaptor for platform window management (~90%)
- completely independant widgets implemented as functional structures (can be used everywhere from 3D environments to desktop) (~80%)
- abstract interchangeable controls (draw objects can be changed on the fly) (WIP)
- skin engine (native, html/css, xml & custom) (WIP)
Multimedia
- codecs backend manager
- audio/video synchronization and manipulation
Audio
- audio backend using compute library
- audio file loader (format decoder, quality convertion and manipulation) (~30%)
- listener functions (Done)
- recorder (Done)
- sound source (Done)
- dynamic circular buffer (Done)
- emitter (Done)
- advanced player (WIP)
- equalizer and filters
Video
- video backend using compute library
- equalizer and filters
- multi-screen support
- desktop recording
Utilities
- timer (Done)
- calendar
- passive timeline with speed adjustment (Done)
- fast COW string (Done)
- circular queue + atomic (WIP)
- signals (Done)
- reactive functional types (WIP)
- simd types
- resource management (WIP)
Longterm Framework Goals
- completely integrate into the std library (~40%)
- unified dynamic memory management for both host and compute devices (~80%)
- drop opengl, directx, glew, egl (WIP)
- drop freetype (WIP)
- drop openal (WIP)
- drop sndfile
- transparent filesystem management (using protocols)
- prepare the library for universal memory (memristors)