globjects 1.0.0 veröffentlicht

CG Internals hat globjects in der Version 1.0.0 veröffentlicht. globjects ist eine plattformübergreifende, objektorientierte Open Source Bibliothek für die OpenGL API. Sie erlaubt eine moderne, verständliche und zugleich weniger fehleranfällige Nutzung der OpenGL API: sie reduziert die für Renderingabläufe benötigte Menge an OpenGL-spezifischem Quelltext und erleichtert die Benutzung von OpenGL über eine typsichere Abstraktion basierend auf glbinding und OpenGL Mathematics (GLM). Typische Renderingabläufe sind automatisiert und fehlende Features von OpenGL Treibern sind partiell simuliert oder werden zur Laufzeit emuliert.

what-is-globjects

OpenGL nutzt Konzepte von Zuständen (states, z. B. Point Size, Rasterization State) und Objekten (objects, z. B. Textures und Shaders). Da OpenGL als reine C API spezifiziert ist, werden Objekte mittels Handles referenziert. globjects ersetzt diese Handles mit Klassen die alle dem jeweiligen Objekt assozierten OpenGL Funktionen vereint und bereitstellt. Eine globjects Textur kapselt beispielsweise alle Abläufe zur Texturerzeugung, -initialisierung, -modifikation sowie -löschung. Dieser Ansatz fördert eine weniger fehleranfällige Nutzung der OpenGL API.

Der folgende Quellcode zeigt eine exemplarische Nutzung der OpenGL API:

auto program = glCreateProgram();
auto vertexShader = glCreateShader(GL_VERTEX_SHADER);
auto fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);

glShaderSource(vertexShader, 1, &vertexShaderSource, nullptr);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, nullptr);

glCompileShader(vertexShader);
glCompileShader(fragmentShader);

glAttachShader(program, vertexShader);
glAttachShader(program, fragmentShader);

glLinkProgram(program);

glUseProgram(program);
glUniform2f(glGetUniformLocation(program, "extent"), 1.0f, 0.5f);

Unter Nutzung von globjects kann das Beispiel zu folgenden Quellcode vereinfacht werden:

auto program = new globjects::Program();

program->attach(
  globjects::Shader::fromString(GL_VERTEX_SHADER, vertexShaderSource), 
  globjects::Shader::fromString(GL_FRAGMENT_SHADER, fragmentShaderSource));

program->setUniform("extent", glm::vec2(1.0f, 0.5f)));

globjects kann in OpenGL basierten Frameworks und Engines als benutzerfreundliche Rendering API eingesetzt werden. Zudem ist globjects besonders zum Lernen von OpenGL geeignet, da es modernes OpenGL kommuniziert, indem es ein einheitliches, konsistentes Interface bereitstellt und intern, wenn nötig, automatisch auf ältere Konzepte für deren Implementierung zurückgreift.

globjects stellt eine umfangreiche Dokumentation bereit und ist unter anderem verfügbar als Installer für Windows, Homebrew-Paket sowie als Ubuntu PPA-Paket. Die Auflistung der wichtigsten Features befindet sich auf GitHub.


Pressemitteilung erstellt von Willy Scheibel, 18. November 2016.