Lazarus - OpenGL 3.3 Tutorial - Shader - Einleitung und laden der Shader: Unterschied zwischen den Versionen
Zeile 1: | Zeile 1: | ||
− | [[Image:Lazarus - OpenGL 3.3 Tutorial Shader - Einleitung und laden der Shader.png|200px]]<br><br> | + | [[Image:Lazarus - OpenGL 3.3 Tutorial - Shader - Einleitung und laden der Shader.png|200px]]<br><br> |
= Shader - Einleitung und laden der Shader = | = Shader - Einleitung und laden der Shader = | ||
== Einleitung == | == Einleitung == |
Version vom 14. Dezember 2017, 00:09 Uhr
Shader - Einleitung und laden der Shader
Einleitung
In OpenGL 3.3 gibt es drei verschiedene Shadertypen, den Vertex-, Geometry- und Fragment-Shader.
Wobei der Vertex-Shader immer vorhanden sein muss. Der Fragment-Shader wird benötigt, wenn die Ausgabe des Rendervorgangs ein Bild sein soll, also fast immer.
Der Geometry-Shader ist optional.
In OpenGL 4.0 wurden noch zwei Tessellations-Shader eingeführt, aber dies gehört eigentlich nicht hier hin.
Die Shader werden mit der Programmiersprache OpenGL Shading Language (GLSL) programmiert. Die ist eine C/C++ ähnliche Sprache.
Daher muss auf Gross- und Kleinschreibung geachtet werden.
Der kompilierte Code von GLSL läufen direkt in der Grafikkarte (GPU).
Damit das Laden der Shader einfacher ist, habe ich im Unit-Verzeichnis eine Unit Shader.pas erstellt, welche eine Klasse für den Shader enthält.
Somit ist der Ablauf sehr einfach.
Der Konstructor verlangt die Shader-Objecte als String. Wen die Shader-Object als Dateien vorliegen, habe ich eine Hilfs-Funktion in de Shader Unit.
Dies ist FileToStr(... . Im Tutorial wird immer diese verwendet.
var
Shader : TShader;
begin
Shader := TShader.Create(Vertex_Shader, Fragment_Shader); // Shader laden
Shader.UseProgram; // Aktiviert den Shader
Shader.Free // Gibt den Shader frei
In folgenden Beispielen werden die Shader nur noch mit dieser Klasse geladen, damit es übersichtlicher wird.
Wie man es nativ machen kann, wird im Einstiegs-Tutorial unter erster Shader gezeigt.
Autor: Mathias
Siehe auch
- Übersichtseite Lazarus - OpenGL 3.3 Tutorial