summaryrefslogtreecommitdiffstats
path: root/src/de/gamezock/metacraft/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/gamezock/metacraft/ui')
-rw-r--r--src/de/gamezock/metacraft/ui/Main.java17
-rw-r--r--src/de/gamezock/metacraft/ui/ShaderLoader.java72
2 files changed, 87 insertions, 2 deletions
diff --git a/src/de/gamezock/metacraft/ui/Main.java b/src/de/gamezock/metacraft/ui/Main.java
index 287af22..bfdde1c 100644
--- a/src/de/gamezock/metacraft/ui/Main.java
+++ b/src/de/gamezock/metacraft/ui/Main.java
@@ -95,20 +95,33 @@ public class Main implements GLEventListener {
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, new float[] {0.5f, 0.5f, 0.5f, 1}, 0);
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, new float[] {0, 0, 0, 0}, 0);
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, new float[] {10, 10, 10, 1}, 0);
+ gl.glLightf(GL2.GL_LIGHT0, GL2.GL_QUADRATIC_ATTENUATION, 0.01f);
gl.glMaterialfv(GL.GL_FRONT, GL2.GL_SPECULAR, new float[] {0, 0, 0, 0}, 0);
+ ShaderLoader.load(gl, "default.vert", "default.frag");
+
new Thread(new Runnable() {
@Override
public void run() {
+ long time = System.currentTimeMillis();
+ int frames = 0;
+
while(true) {
canvas.display();
+ ++frames;
+
+ if(System.currentTimeMillis() - time >= 1000) {
+ System.err.println(frames + " fps");
+ frames = 0;
+ time += 1000;
+ }
try {
- Thread.sleep(10);
+ Thread.sleep(5);
} catch (InterruptedException e) {
- }
+ }
}
}
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;
+ }
+}