Checkliste Shader

Aus DGL Wiki
Version vom 20. August 2010, 08:24 Uhr von Flash (Diskussion | Beiträge) (Checkliste bei Shaderproblemen)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Verwendung der Checkliste

Die nachfolgende Checkliste sollte nach und nach abgearbeitet werden um einfache Fehler auszuschließen. Wenn ein Punkt mit ja beantwortet werden kann, kann man den nächsten Punkt angehen.

Die Grundlagen sollen ausschließen, dass Fehler existieren noch bevor der Shader ins Spiel kommt.

Grundlagen

  • Benutze ich eine funktionierende Programmgrundlage (Template)?
Wurde ein Template von DelphiGL.com benutzt, oder wurde das Template bereits erfolgreich getestet dann kann von einer Funktionierenden Programmgrundlage ausgegangen werden.
  • Funktioniert das Programm ohne Shader?
Kommentiere allen Shader Code aus, bzw. umgehe den Shadercode falls möglich und prüfe die Ausgabe um sicherzustellen, dass nicht andere Teile der Ausgabe den Fehler verursachen (z.B. Z-Buffer, Blending etc.)
  • Läuft das Programm ohne OpenGL-Fehler zu produzieren?
Benutzen sie einen Error-Handler wie er im "Tutorial_quickstart" beschrieben wird, um dies zu testen.
  • Unterstützt die Grafikkarte überhaupt Shader?
Fragen Sie die OpenGL Version ab. Siehe glGetString

Problemspezifisches

  • Funktioniert die Fehlerabfrage beim Shaderbau?
Bauen Sie versuchsweise etwas in den Shader ein, was Compilefehler verursachen muss und prüfen sie ob die Meldung entsprechend geloggt wird.
  • Läßt sich der Shader kompilieren?
Prüfen Sie, ob der Code wirklich korrekt an glShaderSource() übergeben wird (einfach einen Haltepunkt setzen).
  • Wurden die Uniforms erst gesetzt als der Shader gebunden war?
Ein beliebter Fehler: Stellen Sie sicher dass Uniforms erst gesetzt werden nachdem der Shader gebunden war.
  • Wird der Fragmentshader überhaupt ausgeführt?
Den Fragmentshader einfach mal eine konstante Farbe (ungleich der Hintergrundfarbe) ausgeben lassen um zu sehen ob dieser überhaupt ausgeführt wird.
  • Entspricht die Ausgabe nicht den erwarteten Beleuchtungsergebnissen?
Checken ob die Normalen richtig sind. Dazu einfach im Fragmentshader die Normale als Farbe ausgeben. Die Farbe sollte sich je nach Ausrichtung einer Fläche zur Kamera ändern. Zur Kamera gewandte Flächen sollten bläulich erscheinen, da die Normale in Richtung der Z-Achse stehen müsste. Es ist oft einen Versuch Wert einfach mal das Vorzeichen der Normale umzukehren. Damit die Farben gut rauskommen kann dieser Codeschnipsel verwendet werden:
gl_FragColor = vec4(normal / 2.0 + 0.5, 1.0);
  • Entspricht die Texturierung nicht den Erwartungen?
Checken ob die Texturkoordinaten korrekt sind. Auch hier die Texturkoordinaten als Farbwert ausgeben lassen.