• Stars
    star
    52
  • Rank 560,474 (Top 12 %)
  • Language
    Ada
  • License
    Apache License 2.0
  • Created over 8 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The OpenGL 4.6 Rendering Kernel in Ada 2012

Orka

Build status Test status Docs status License GitHub release Gitter chat


Orka is an OpenGL 4.6 rendering kernel written in Ada 2022. It provides the building blocks like a frame graph to render 3D graphics or to do general-purpose computing on the GPU. It also takes care of displaying a window and manage input devices like gamepads.

  • Frame graph. Create a frame graph with render passes and textures to describe how a frame should be rendered. Any color or depth texture can be rendered to the window of the application or to a KTX file. The pipeline state needed for each render pass is updated automatically. Multiple small frame graphs can be connected to each other to build a larger frame graph with a few lines of code.

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

  • Algorithms and effects. Compute a prefix sum or a 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 of planets.

  • Debug rendering and logging. Various packages exist which 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.

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

  • Asynchronous resource loading. Load resources like KTX textures and glTF models asynchronously. Resources can be loaded from directories and archive files.

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 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:

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.

See the contributing guidelines for more information.

License

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

More Repositories

1

OpenRTI

Mirror of OpenRTI on SourceForge. Do not create PR's. Instead send patches or git pull commands to the mailing list on SF.
C++
51
star
2

json-ada

An Ada 2012 library for parsing JSON
Ada
35
star
3

inotify-ada

An Ada 2012 library for monitoring filesystem events using Linux' inotify API
Ada
8
star
4

emojis

An Ada 2012 library to replace names between colons with emojis
Ada
7
star
5

xoshiro

Ada/SPARK port of the xoshiro128++ and xoshiro256++ pseudo-random number generators
Ada
7
star
6

wayland-ada

Ada 2012 bindings for Wayland
Ada
6
star
7

dcf-ada

An Ada 2012 library for document container files
Ada
5
star
8

orka-demo

Demo project using Orka 3D engine
Ada
4
star
9

evdev-ada

An Ada 2012 library to read input events and use force-feedback using Linux' evdev API
Ada
4
star
10

canberra-ada

Ada 2012 bindings for libcanberra
Ada
4
star
11

awt

Ada Window Toolkit, a library for managing input devices and windows that can display 3D graphics
3
star
12

weechat-ada

Ada 2012 library for WeeChat plug-ins
Ada
3
star
13

vim-ada

Modified Vim script for Ada 2012
Vim Script
2
star
14

weechat-emoji

A WeeChat plug-in written in Ada 2012 🥰 that displays emoji 🥳
Ada
2
star
15

spoon

An Ada 2012 library for posix_spawn() to spawn processes without a fork().
Ada
2
star
16

opus-ada

Ada 2012 bindings for the Opus audio codec.
Ada
2
star
17

xdg-base-dir

Ada 2012 library implementing the XDG Base Directory Specification
Ada
1
star
18

goblin-terminal

A mutated clone of GNOME Terminal
Python
1
star
19

weechat-canberra

A WeeChat plug-in written in Ada 2012 that plays sounds using libcanberra
Ada
1
star