diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2010-01-19 01:09:01 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2010-01-19 01:09:01 +0100 |
commit | c7030ae2b41fc2e559304737a54d6f927cf3d740 (patch) | |
tree | a301bfc4e19a5198bafafdb6083ec9667c95abfb /src/de/gamezock/metacraft/ui/ShaderLoader.java | |
parent | 9cb41d127063297432f768f7cb0f466b76921103 (diff) | |
download | metacraft-c7030ae2b41fc2e559304737a54d6f927cf3d740.tar metacraft-c7030ae2b41fc2e559304737a54d6f927cf3d740.zip |
Added shader loader (and default shaders)
Diffstat (limited to 'src/de/gamezock/metacraft/ui/ShaderLoader.java')
-rw-r--r-- | src/de/gamezock/metacraft/ui/ShaderLoader.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/de/gamezock/metacraft/ui/ShaderLoader.java b/src/de/gamezock/metacraft/ui/ShaderLoader.java new file mode 100644 index 0000000..25bc4eb --- /dev/null +++ b/src/de/gamezock/metacraft/ui/ShaderLoader.java @@ -0,0 +1,72 @@ +package de.gamezock.metacraft.ui; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.AbstractMap; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import javax.media.opengl.GL2; + +public class ShaderLoader { + private static Map<Entry<String, String>, Integer> programs = new HashMap<Entry<String, String>, Integer>(); + + static private String readStream(InputStream stream) throws IOException { + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + String ret = "", line; + + while ((line = reader.readLine()) != null) { + ret += line + "\n"; + } + + return ret; + } + + static boolean load(GL2 gl, String vsName, String fsName) { + Integer savedProg = programs.get(new AbstractMap.SimpleEntry<String, String>(vsName, fsName)); + if(savedProg != null) { + gl.glUseProgram(savedProg); + return true; + } + + int vs = gl.glCreateShader(GL2.GL_VERTEX_SHADER); + int fs = gl.glCreateShader(GL2.GL_FRAGMENT_SHADER); + + InputStream vsStream = ShaderLoader.class.getResourceAsStream("/de/gamezock/metacraft/resources/shaders/" + vsName); + String vsSource; + try { + vsSource = readStream(vsStream); + } catch (IOException e) { + return false; + } + + gl.glShaderSource(vs, 1, new String[] {vsSource}, null); + gl.glCompileShader(vs); + + InputStream fsStream = ShaderLoader.class.getResourceAsStream("/de/gamezock/metacraft/resources/shaders/" + fsName); + String fsSource; + try { + fsSource = readStream(fsStream); + } catch (IOException e) { + return false; + } + + gl.glShaderSource(fs, 1, new String[] {fsSource}, null); + gl.glCompileShader(fs); + + int program = gl.glCreateProgram(); + gl.glAttachShader(program, vs); + gl.glAttachShader(program, fs); + gl.glLinkProgram(program); + gl.glValidateProgram(program); + + gl.glUseProgram(program); + + programs.put(new AbstractMap.SimpleEntry<String, String>(vsName, fsName), program); + + return true; + } +} |