Orka is an OpenGL 4.6 rendering kernel written in Ada 2012. It provides the building blocks to easily render 3D graphics or do general-purpose computing on the GPU, and to use input devices like gamepads.
Object-oriented rendering API. Renderer objects like shader programs, framebuffers, buffers, and textures can be used via an object-oriented API. Objects are automatically created and destroyed by using controlled types. Various AZDO techniques can be used to allow multithreaded buffer updates and batched draw calls for high performance rendering.
Debug rendering and logging. Various packages exist that can be used to draw bounding boxes, coordinate axes, lines, and spheres for debugging. Messages from the rendering API or other parts of your application can be logged to the terminal or files.
Algorithms and effects. Compute the prefix sum or Fast Fourier Transform using compute shaders, or apply a (Gaussian) blur to a texture.
Atmosphere and terrain. Render a realistic atmosphere or adaptive tessellated terrain.
Joysticks and gamepads. Joysticks and gamepads can be managed via an API. Analog axes can be filtered with a low-pass filter, dead zones can be removed, and axes and triggers can be inverted or normalized. It is possible to detect chords (groups of buttons), button sequences, and rapid button tapping.
Job graph processing system. A job graph processing system provides flexible multitasking by allowing work to be split into multiple small jobs which are then processed by any available task from a task pool. Jobs can be processed in parallel as well as sequentially.
Quaternions and matrices. Packages for applying common transformations to vectors, quaternions, and matrices using x86 SIMD instructions are provided. The various x86 SIMD extensions like SSE, AVX2, FMA, F16C, etc., can also be used directly in your own code.
Additionally, Orka provides several bindings:
OpenGL 4.6. Thick bindings are provided for the modern parts of OpenGL 4.6. There are no bindings for fixed function functionality that is deprecated or functions that have been superseded by newer extensions.
EGL. Thick bindings for EGL are provided to create a surfaceless context for rendering without the presence of a windowing system.
GLFW 3. Provides bindings for GLFW 3.x. This is a library for creating windows with an OpenGL context on them. It also provides functionality for capturing user input on keyboard, mouse, and joystick. Alternatively, libraries like SDL can be used instead to create windows and process input.
The documentation can be viewed on the website.
Ada is an imperative and object-oriented programming language focused on correctness, readability, and good software engineering practices for large scale systems and safety-critical and embedded real-time systems.
It has a very strong static type system where you can create your own types that reflect the problem domain, with optional low-level control of your data. Packages provide modularity and information hiding. High-level concurrency primitives like protected objects allow safe communication between tasks and design-by-contract is supported through type invariants, predicates, and pre- and postconditions.
If you would like to learn Ada, then here are a few resources to get started:
Introduction to Ada (An interactive tutorial in your browser)
If you would like to fix a bug, add an improvement, or have suggestions or advice regarding the architecture, APIs, performance, or code comments and documentation, then do not hesitate to open a new issue.
Make sure you have read the contributing guidelines before opening an issue or pull request.
Orka is distributed under the terms of the Apache License 2.0 except for a few packages and files.
The following packages and/or files are licensed under the BSD 3-Clause license:
Orka.Features.Atmosphere(and child packages
The following packages and/or files are licensed under the MIT license:
- Files in