Lazarus - OpenGL 3.3 Tutorial - Shader - Einleitung und laden der Shader: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „200px<br><br> = Shader - Einleitung und laden der Shader = == Einleitung == In '''OpenGL 3.3''' gibt…“)
 
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Image: 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 ==
 
In '''OpenGL 3.3''' gibt es drei verschiedene '''Shadertypen''', den '''Vertex-''', '''Geometry-''' und '''Fragment-Shader'''.<br>
 
In '''OpenGL 3.3''' gibt es drei verschiedene '''Shadertypen''', den '''Vertex-''', '''Geometry-''' und '''Fragment-Shader'''.<br>
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

Lazarus - OpenGL 3.3 Tutorial - Shader - Einleitung und laden der Shader.png

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