Skip to content

Build status Test status Docs status License GitHub release IRC Gitter chat

Orka

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 blurring effect to a texture.

  • Atmosphere and terrain. Render a realistic atmosphere or adaptive tessellated terrain.

  • Windows and input devices. Use AWT to manage input devices like the pointer, keyboard, and gamepads, and windows that can display 3D graphics. It has a similar purpose as GLFW and SDL. Alternatively, a library like SDL can be used instead to create windows and process input.

  • Joysticks and gamepads. Manage joysticks and gamepads. 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.

  • Asynchronous resource loading. Load resources like KTX textures and glTF models asynchronously using the job graph processing system. Resources can be loaded from directories and archive files.

  • Transforms. Apply common transformations to vectors, quaternions, and matrices using x86 SIMD instructions.

  • Numerics. Perform element-wise operations, reductions using arbitrary expressions, or matrix operations on tensors using SIMD instructions. Generate tensors with statistical distributions, or use Runge-Kutta 4th order numerical integrators or sigma-point Kalman filters.

Additionally, Orka provides several bindings:

  • x86 SIMD extensions Bindings for various x86 SIMD extensions, including SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, FMA, and F16C, and an implementation of the xoshiro pseudo-random number generator using SSE2 or AVX2 intrinsics.

  • 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.

Documentation

The documentation can be viewed on the website.

Learning Ada

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:

Contributing

If you would like to fix a bug, add a feature, improve the documentation or have suggestions or advice about the architecture, APIs, or performance, then do not hesitate to open a new issue.

Make sure you have read the contributing guidelines before opening an issue or pull request.

License

Most Orka crates are distributed under the terms of the Apache License 2.0 except for a few separate Alire crates: