# OpenGL (LWJGL) Shader Programmierung GLSL



## FawKes100 (6. Aug 2019)

Hallöchen,

vorab eine kurze Entschuldigung, falls ich das Thema bzw, die Frage ins falsche Unterforum gestellt hab. Ich dachte, dass es hier wohl am ehesten reinpasst. Ich bin momentan dabei mich ein wenig in OpenGL einzuarbeiten in Kombination mit Java.

Soweit klappt eigentlich auch alles ganz gut, ich schaffe es nen Rechteck zu rendern mit Index Buffern.
Nun habe ich mich heute allerdings erstmals an Shader gewagt. Ich wollte erreichen, dass jeder Pixel ne individuelle Farbe trägt, abhängig von seiner "Entfernung" zu den Vertices.
Hierfür folge ich diesem Tutorial: OpenGL 3d Game Tutorial 5: Coloring Using Shaders
Wenn ich nun aber den Shader Compile, bzw. das gesamte Programm, bekomme ich ne Fehlermeldung:


```
Vertex shader failed to compile with the following errors:
Could not compile Shader..
ERROR: 0:1: error(#132) Syntax error: "35" parse error
ERROR: error(#273) 1 compilation errors.  No code generated
```

Daher hier der Code, des Vertex-Shaders, der die Fehlermeldungauszulösen scheint:


```
#version 150

in vec3 position;

out vec3 color;

void main(void){
    gl_Position = vec4(position.x, position.y, position.z, 1.0);
    color = vec3(position.x+0.5,0.0,position.y+0.5);
}
```

Hier nochmal der Code des Fragment Shaders, falls der auch benötigt wird:


```
#version 150

in vec3 color;

out vec4 out_Color;

void main(void){
    out_Color = vec4(color,1.0);
}
```

Und schließlich hab ich hier noch die Methode, die den Shader compiled:


```
private static int loadShader(String file, int type)

    {

        StringBuilder shaderSource = new StringBuilder();

        try

        {

            FileReader fileReader = new FileReader(file);

            BufferedReader bufferedReader = new BufferedReader(fileReader);

            while(bufferedReader.ready())

            {

                shaderSource.append(bufferedReader.read()).append("//\n");

            }

            bufferedReader.close();

            fileReader.close();

        } catch (IOException e) {

           System.err.println("Could not read file");

            e.printStackTrace();

        }



        int shaderID = GL20.glCreateShader(type);

        GL20.glShaderSource(shaderID, shaderSource);

        GL20.glCompileShader(shaderID);

        if(GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE)

        {

            System.out.println(GL20.glGetShaderInfoLog(shaderID));

            System.err.println("Could not compile Shader..");

            System.exit(-1);

        }

        return shaderID;

    }
```
Allerdings ist der Code der Shader und auch der des Shaderprogramms fast komplett identisch mit dem des Tutorials.
Auch so finde ich keine Syntax-Fehler.. Hat zufällig einer von euch ne Idee woran es liegen könnte?


----------



## httpdigest (6. Aug 2019)

Das Problem ist, dass du dir per BufferedReader.read() die einzelnen CodePoints der Zeichen (als int) in der Textdatei holst und per StringBuilder.append(int) konkatenierst. Hierbei entsteht ein String im StringBuilder, der nicht die eigentlichen Zeichen der Datei enthält, sondern die Codepoints Zahlen als Zeichen...
Gib dir einfach mal `shaderSource.toString()` aus, dann siehst du, was ich meine.
Zum Einlesen einer Datei als String, schau mal hier: https://stackoverflow.com/questions...ing-from-the-contents-of-a-file#answer-326440


----------



## FawKes100 (7. Aug 2019)

Oh.. da ist mir nen Flüchtigkeitsfehler unterlaufen.. Wollte die Datei mit readLine(); einlesen nicht mit read();
Damit hat sich der Fehler tatsächlich erledigt.. Hätte ich die Zeile in nem String gespeichert wie sonst wäre's mir auf gefallen.
Damit danke ich auf jeden Fall für die schnelle Hilfe


----------

