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