OpenGL (Open Graphics Library) ist eine plattformübergreifende Programmierschnittstelle für 2D- und 3D-Grafik. Sie wurde Anfang der 1990er Jahre bei Silicon Graphics (SGI) als Nachfolger der proprietären IRIS-GL entwickelt und 1992 als OpenGL 1.0 veröffentlicht. Heute pflegt das Industriekonsortium Khronos Group den Standard.

Kontext erstellen

OpenGL braucht eine Fenster-Bibliothek wie GLFW oder GLUT. Die zentralen Aufrufe eines minimalen Programms:

glfwInit();                       // GLFW initialisieren
GLFWwindow* win = glfwCreateWindow(800, 600, "Demo", NULL, NULL);
glfwMakeContextCurrent(win);
glewInit();                       // GL-Funktionszeiger laden

Puffer und Vertex-Daten

Geometrie liegt in Vertex Buffer Objects (VBO) und Vertex Array Objects (VAO):

glGenVertexArrays(1, &vao);     // VAO erzeugen
glBindVertexArray(vao);           // VAO aktivieren
glGenBuffers(1, &vbo);            // VBO erzeugen
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);     // Attribut-Slot 0 aktivieren

Shader kompilieren

Shader werden in GLSL geschrieben und zur Laufzeit übersetzt:

GLuint vs = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vs, 1, &src, NULL);
glCompileShader(vs);              // Compile-Fehler via glGetShaderInfoLog prüfen
GLuint prog = glCreateProgram();
glAttachShader(prog, vs);
glLinkProgram(prog);
glUseProgram(prog);               // Programm aktivieren

Zeichnen und Swap

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3); // 3 Vertices als Dreieck
glfwSwapBuffers(win);             // Doppelpuffer tauschen

Besonderheiten

  • Seit OpenGL 3.1 (2009) ist die alte Fixed-Function-Pipeline entfernt; moderne Programme nutzen ausschließlich Shader.
  • OpenGL 4.6 (2017) ist die letzte Version; neue Funktionen erscheinen nur noch als Extensions.
  • Die Shader-Sprache GLSL ist eng mit OpenGL verzahnt.

Verwandte APIs: Vulkan (Nachfolger mit expliziter Kontrolle) und DirectX (Microsoft). Programmierung meist in C/C++.