Lazarus - OpenGL 3.3 Tutorial - Shader - Einleitung und laden der Shader: Unterschied zwischen den Versionen
Zeile 9: | Zeile 9: | ||
Die Shader werden mit der Programmiersprache '''OpenGL Shading Language (GLSL)''' programmiert. Die ist eine C/C++ ähnliche Sprache.<br> | Die Shader werden mit der Programmiersprache '''OpenGL Shading Language (GLSL)''' programmiert. Die ist eine C/C++ ähnliche Sprache.<br> | ||
Daher muss auf '''Gross- und Kleinschreibung''' geachtet werden.<br> | Daher muss auf '''Gross- und Kleinschreibung''' geachtet werden.<br> | ||
+ | <br> | ||
+ | Somit sind auch Kommentare wie in C/C++ möglich.<br> | ||
+ | <syntaxhighlight lang="text">// Ich bin ein Kommentar | ||
+ | /* Ich bin ein Kommentar */</syntaxhighlight> | ||
<br> | <br> | ||
Der kompilierte Code von GLSL läufen direkt in der Grafikkarte (GPU).<br> | Der kompilierte Code von GLSL läufen direkt in der Grafikkarte (GPU).<br> |
Aktuelle Version vom 7. Juli 2018, 17:40 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.
Somit sind auch Kommentare wie in C/C++ möglich.
// Ich bin ein Kommentar
/* Ich bin ein Kommentar */
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