Hallo,
Ich versuche momentan GLSL Shader in JOGL zum Laufen zu bekommen. Ich habe im Internet bisher nicht wirklich etwas gefunden was funktionierte. Auch die JOGL Dokumentation ist nicht sehr hilfreich.
Was ich möchte ist: Einen Vertex und einen Fragment Shader laden und benutzen, hierzu verwende ich diesen Code, der zwar compiliert, aber nichts tut:
Ich wollte eigentlich noch eine Debug Funktion (mittels glGetObjectParameterivARB) einbauen, jedoch habe ich dies bisher auch nicht hinbekommen. Vielleicht wüsste ich dann, warum mein Shader nichts tut (sprich die Default-Renderpipeline benutzt wird).
Vielen Dank,
mfg
Ich versuche momentan GLSL Shader in JOGL zum Laufen zu bekommen. Ich habe im Internet bisher nicht wirklich etwas gefunden was funktionierte. Auch die JOGL Dokumentation ist nicht sehr hilfreich.
Was ich möchte ist: Einen Vertex und einen Fragment Shader laden und benutzen, hierzu verwende ich diesen Code, der zwar compiliert, aber nichts tut:
Java:
import java.io.*;
import javax.media.opengl.*;
public class GLSLShader {
private GL gl;
private int shaderProgram;
private boolean ready = false;
public GLSLShader(GL gl) {
this.gl = gl;
}
public void bindShader() {
if (ready)
gl.glUseProgram(shaderProgram);
}
public boolean loadFromFile(String vertexShaderFilename, String fragmentShaderFilename) {
ready = false;
int vert = gl.glCreateShader(GL.GL_VERTEX_SHADER);
int frag = gl.glCreateShader(GL.GL_FRAGMENT_SHADER);
// Vertex Shader
BufferedReader vert_reader;
try {
vert_reader = new BufferedReader(new FileReader(vertexShaderFilename));
} catch (FileNotFoundException e) {
System.out.println(e);
return false;
}
String[] vshader = new String[1];
String line;
try {
line = vert_reader.readLine();
while (line != null) {
vshader[0] += line + "\n";
line = vert_reader.readLine();
}
} catch (IOException e) {
// Fehler beim Lesen der Datei!
System.out.println(e);
return false;
}
int[] vlen = new int[1];
vlen[0] = vshader[0].length();
gl.glShaderSource(vert, 1, vshader, vlen, 0);
gl.glCompileShader(vert);
// Fragment Shader
BufferedReader frag_reader;
try {
frag_reader = new BufferedReader(new FileReader(fragmentShaderFilename));
} catch (FileNotFoundException e) {
System.out.println(e);
return false;
}
String[] fshader = new String[1];
try {
line = frag_reader.readLine();
while (line != null) {
fshader[0] += line + "\n";
line = frag_reader.readLine();
}
} catch (IOException e) {
System.out.println(e);
return false;
}
int[] flen = new int[1];
flen[0] = fshader[0].length();
gl.glShaderSource(frag, 1, fshader, flen, 0);
gl.glCompileShader(frag);
// Shaderprogram
shaderProgram = gl.glCreateProgram();
gl.glAttachShader(shaderProgram, vert);
gl.glAttachShader(shaderProgram, frag);
gl.glLinkProgram(shaderProgram);
gl.glValidateProgram(shaderProgram);
// Freigeben
// gl.glDeleteShader(vert);
// gl.glDeleteShader(frag);
ready = true;
return true;
}
}
Vielen Dank,
mfg
Zuletzt bearbeitet: