Shader Compilation Fehler Handling #35

Closed
opened 2026-04-17 04:47:47 +00:00 by sebastian · 0 comments
Owner

Problem: Schlägt die Shader-Compilation fehl (fehlende Datei, Syntax-Fehler in .glsl), gibt ShaderProgram::loadShader() 0 zurück ohne Log oder Fehleranzeige. Das Programm läuft weiter und rendert schlicht nichts – ein schwer zu diagnostizierendes Problem.
Lösung: OpenGL-Compilation-Log auslesen und bei Fehler abbrechen:

// ShaderProgram.cpp:
static GLuint loadShader(const std::string& file, GLenum type) {
    // ... Datei laden ...

    GLuint shaderID = glCreateShader(type);
    glShaderSource(shaderID, 1, &src, nullptr);
    glCompileShader(shaderID);

    GLint success;
    glGetShaderiv(shaderID, GL_COMPILE_STATUS, &success);
    if (!success) {
        GLchar log[1024];
        glGetShaderInfoLog(shaderID, sizeof(log), nullptr, log);
        std::cerr << "[ShaderProgram] Compilation failed: " << file << "\n" << log << "\n";
        glDeleteShader(shaderID);
        return 0;
    }
    return shaderID;
}

Gleiches Muster für das Linken des Shader-Programms (GL_LINK_STATUS).
Acceptance Criteria:

  • Compilation-Fehler werden mit Dateiname und GLSL-Fehlermeldung in stderr geloggt
  • Link-Fehler werden ebenfalls geloggt
  • Bei Fehler: sauberes return 0 ohne Crash, aber deutliche Fehlermeldung
  • Manueller Test: Syntax-Fehler in vertexShader.glsl → lesbare Fehlermeldung in Konsole
Problem: Schlägt die Shader-Compilation fehl (fehlende Datei, Syntax-Fehler in .glsl), gibt ShaderProgram::loadShader() 0 zurück ohne Log oder Fehleranzeige. Das Programm läuft weiter und rendert schlicht nichts – ein schwer zu diagnostizierendes Problem. Lösung: OpenGL-Compilation-Log auslesen und bei Fehler abbrechen: ``` // ShaderProgram.cpp: static GLuint loadShader(const std::string& file, GLenum type) { // ... Datei laden ... GLuint shaderID = glCreateShader(type); glShaderSource(shaderID, 1, &src, nullptr); glCompileShader(shaderID); GLint success; glGetShaderiv(shaderID, GL_COMPILE_STATUS, &success); if (!success) { GLchar log[1024]; glGetShaderInfoLog(shaderID, sizeof(log), nullptr, log); std::cerr << "[ShaderProgram] Compilation failed: " << file << "\n" << log << "\n"; glDeleteShader(shaderID); return 0; } return shaderID; } ``` Gleiches Muster für das Linken des Shader-Programms (GL_LINK_STATUS). Acceptance Criteria: - Compilation-Fehler werden mit Dateiname und GLSL-Fehlermeldung in stderr geloggt - Link-Fehler werden ebenfalls geloggt - Bei Fehler: sauberes return 0 ohne Crash, aber deutliche Fehlermeldung - Manueller Test: Syntax-Fehler in vertexShader.glsl → lesbare Fehlermeldung in Konsole
sebastian added this to the RenderSystem Refactoring milestone 2026-04-17 04:47:47 +00:00
sebastian added the
bug
engine
labels 2026-04-17 04:47:47 +00:00
sebastian added this to the Dicewars project 2026-04-17 04:47:47 +00:00
sebastian added the
invalid
label 2026-04-18 05:07:08 +00:00
Sign in to join this conversation.
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sebastian/Dicewars-Siedler#35
No description provided.