Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Build status Test status Docs status License GitHub release Gitter chat

Orka is an OpenGL 4.6 rendering kernel written in Ada 2012. It provides the building blocks like a frame graph to 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.

  • Frame graph. Create a graph with render passes and textures to easily display a texture or depth buffer on the screen.

  • 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 the built-in window toolkit 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, but is fully written in Ada.

  • Gamepads. Apply mappings from SDL gamecontroller database, play force-feedback effects, get the estimated orientation and angular velocity of the motion sensor, get the capacity and charging state of the battery, change the color of the LED, and 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.

  • Tensors and numerics. Perform element-wise operations, reductions using arbitrary expressions, or matrix operations on tensors using SIMD instructions on the CPU or compute shaders on the GPU. Generate tensors with some statistical distribution, or use Runge-Kutta 4th order numerical integrators or sigma-point Kalman filters.

  • Surfaceless rendering. Create a surfaceless rendering context without any dependency on a windowing system for using compute shaders on a server.

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.


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 strong static type system which allows you to 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:


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.

See the contributing guidelines for more information.


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