OpenGL Shading Language

OpenGL Shading Language
OpenGL Shading Language
Erscheinungsjahr: 2002
Entwickler: Khronos Group
Aktuelle Version: 4.10  (8. August 2011)
Einflüsse: C
www.opengl.org/documentation/glsl/

Die OpenGL Shading Language (kurz: GLSL oder glSlang) ist eine Programmiersprache, um mittels OpenGL auf dem Grafikprozessor eigene Programme, sogenannte Shader, auszuführen.

Inhaltsverzeichnis

Entstehung und Weiterentwicklung

Unter Shading wird in der Computergrafik die Veränderung einzelner Vertices bzw. Fragmente innerhalb der Grafikpipeline bezeichnet. Die Shader berechnen das Aussehen eines Objektes oder erzeugen Spezialeffekte. Typische Aufgaben sind beispielsweise die Texturierung und die Beleuchtung. In der klassischen (sogenannte Fixed Function) OpenGL-Pipeline sind die einzelnen Berechnungsschritte des Shaders unveränderbar und es können nur einzelne Parameter konfiguriert werden. Um diese Limitierung zu überwinden wurde in der OpenGL-Version 1.4 GLSL als Extension eingeführt. GLSL erlaubt es Teile der Pipeline mittels eigener Programme frei zu definieren. So kann z.B. ein spezielles Beleuchtungsmodell oder ein Textureffekt wie Bumpmapping implementiert werden.

Mit der OpenGL-Version 2.0 wurde die Sprache ein offizieller Bestandteil der OpenGL-Spezifikation, die den Funktionsumfang von OpenGL definiert. Die initiale GLSL Version bot nur einen Vertex- und Fragmentshader. Mit der OpenGL-Version 3.2 wurde sie um den Geometryshader und mit der Version 4.0 um den Tessellationshader ergänzt.

Mit der heutigen auf GLSL basierten Pipeline lassen sich, mit Ausnahme der Rasterisierung, alle Verarbeitungsschritte der Grafikkarte direkt programmieren.

GLSL steht in Konkurrenz zu HLSL, welches die äquivalente Funktionalität für Direct3D bereitstellt.

Sprachmerkmale

GLSL ist eine C-ähnliche Programmiersprache, die speziell an die Notwendigkeiten von Shadern angepasst wurde. So gibt es eingebaute Typen für Vektoren, Matrizen und eine Vielzahl von Mathematik- und Grafikfunktionen. Viele der angebotenen Operationen können auf mehreren Datenelementen gleichzeitig arbeiten (SIMD). Im Unterschied zu C gibt es jedoch keine Zeiger (Pointer).

Es gibt vier unterschiedliche GLSL Shadertypen; Vertex-, Tessellation-, Geometry- und Fragmentshader. Jeder Shadertyp hat charakteristische Ein- und Ausgabeparameter. Der Applikationsentwickler übergibt dem OpenGL Treiber für jeden Shadertyp den Shader-Quellcode sowie alle zusätzlichen Variablen und Konstanten. Der Treiber kompiliert und linkt die Shader zu einem Shaderprogramm. Es ist nicht zwingend alle Shadertypen zu nutzen.

Jedes Primitiv, welches die Applikation zeichnen will passiert nun die im Shaderprogramm enthaltenen Shader in der folgenden Reihenfolge:

1. Vertexshader

Für jedes Vertex wird der Vertexshader einmal ausgeführt. Der Shader hat dabei nur Zugriff auf den gerade behandelte Vertex (inkl. seiner Texturkoordinaten, Normalen und sonstiger übergebener Daten), aber nicht etwa auf Nachbar-Vertices, die Topologie oder Ähnliches.

2. Tessellationshader

Im Tesseleationshader kann eine Fläche (Dreieck oder Viereck) in kleinere Flächen unterteilt werden.

3. Geometryshader

Im Geometryshader können aus einem bestehenden Primitiv (Punkt, Linie, Dreieck) neue Primitive erstellt werden.

4. Fragmentshader

Der Fragmentshader wird für jedes Fragment (Pixel bevor sie auf dem Anzeigegerät angezeigt werden) einmal ausgeführt. Hier wird die Farbe für das entsprechende Fragment berechnet. Fragmentshader sind das Äquivalent zu Direct3Ds Pixelshader.

Beispiel

Ein Beispiel eines GLSL Programms aus einem Vertex- und einem Fragmentshader. Das Programm erzeugt eine rote Silhouette aller Objekte.

Vertexshader

Dieser Vertexshader verhält sich wie die klassische (Fixed Function) OpenGL-Pipeline. Er setzt die Vordergrundfarbe des Vertex auf die von der Applikation spezifizierte Farbe (gl_Color) und die Matrix gl_ModelViewProjectionMatrix positioniert den Vertex (gl_Vertex) relativ zur Kamera im Raum.

  void main(void) 
  {
    gl_FrontColor = gl_Color;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  }

Fragmentshader

Dieser einfache Fragmentshader ignoriert die Eingangsfarbe (gl_Color) und setzt die Fragmentfarbe auf rot.

  void main(void)
  {
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
  }

Literatur

  • Rost, Randi. OpenGL Shading Language. 1st ed. Pearson Education, Inc, 2004. ISBN 0321197895
  • Ihde, Heiko. Shader mit GLSL: Eine Einführung in die OpenGL Shading Language. 1st ed. Diplomica, 2009. ISBN 3836679272

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • OpenGL Shading Language — Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей …   Википедия

  • Shading language — A shading language is a special programming language adapted to easily map on shader programming. Those kind of languages usually have special data types like color and normal. Because of the various target markets of 3D graphics, different… …   Wikipedia

  • Shading language — Shader Un shader (anglais, du verbe to shade : ombrager ou estomper, nuancer) est un programme[Quoi ?] utilisé en image de synthèse pour paramétrer une partie du processus de rendu réalisé par une carte graphique ou un moteur de rendu… …   Wikipédia en Français

  • High Level Shading Language — HLSL (High Level Shading Language) bezeichnet die DirectX Komponente, die die Programmierung von Shader Bausteinen ermöglicht. Inhaltsverzeichnis 1 Shader Sprachen 2 Sprach Elemente 2.1 Globale Shader Parameter …   Deutsch Wikipedia

  • OpenGL — Original author(s) Silicon Graphics Developer(s) Khronos Group Stable release 4.2 …   Wikipedia

  • OpenGL — Entwickler Khronos Group Aktuelle Version 4.2 (8. August 2011) Betriebssystem …   Deutsch Wikipedia

  • Opengl — Entwickler: Khronos Group Aktuelle Version: 3.1 (24. März 2009) Betriebssystem: plattformunabhängig Kategorie …   Deutsch Wikipedia

  • OpenGL — Desarrollador Khronos Group www.opengl.org Información general Diseñador Silicon Graphics …   Wikipedia Español

  • OpenGL — Тип API Раз …   Википедия

  • Opengl — Développeur Silicon Graphics Dernière version …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”