summaryrefslogtreecommitdiffstats
path: root/src/de/gamezock/metacraft/ui/Renderer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/gamezock/metacraft/ui/Renderer.java')
-rw-r--r--src/de/gamezock/metacraft/ui/Renderer.java49
1 files changed, 32 insertions, 17 deletions
diff --git a/src/de/gamezock/metacraft/ui/Renderer.java b/src/de/gamezock/metacraft/ui/Renderer.java
index 3213a53..6d8d04a 100644
--- a/src/de/gamezock/metacraft/ui/Renderer.java
+++ b/src/de/gamezock/metacraft/ui/Renderer.java
@@ -1,12 +1,15 @@
package de.gamezock.metacraft.ui;
+import java.nio.IntBuffer;
+import java.util.List;
+
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
-import javax.vecmath.Point3f;
-import javax.vecmath.Vector3f;
+import de.gamezock.metacraft.data.IndexedTriangle;
import de.gamezock.metacraft.data.Map;
-import de.gamezock.metacraft.data.Triangle;
+import de.gamezock.metacraft.data.Tile;
+import de.gamezock.metacraft.data.VertexBuffer;
public class Renderer {
private Main main;
@@ -15,14 +18,20 @@ public class Renderer {
this.main = main;
}
- private void renderTriangle(GL2 gl, Triangle t) {
- for(int i = 0; i < 3; ++i) {
- Point3f v = t.getVertex(i);
- Vector3f n = t.getNormal(i);
-
- gl.glNormal3f(n.x, n.y, n.z);
- gl.glVertex3f(v.x, v.y, v.z);
- }
+ private void renderTile(GL2 gl, Tile tile) {
+ List<IndexedTriangle> triangles = tile.getData().getTriangles();
+
+ if(triangles.isEmpty())
+ return;
+
+ VertexBuffer buffer = triangles.get(0).getBuffer();
+
+ gl.glInterleavedArrays(GL2.GL_N3F_V3F, 0, buffer.getBuffer().clear());
+
+ IntBuffer indexBuffer = tile.getData().getIndexBuffer();
+ indexBuffer.clear();
+
+ gl.glDrawElements(GL.GL_TRIANGLES, indexBuffer.capacity(), GL2.GL_UNSIGNED_INT, indexBuffer);
}
public void render(GL2 gl) {
@@ -30,20 +39,26 @@ public class Renderer {
Map currentMap = main.getCurrentMap();
+ gl.glEnable(GL2.GL_VERTEX_ARRAY);
+ gl.glEnable(GL2.GL_NORMAL_ARRAY);
+
gl.glPushMatrix();
gl.glRotatef((System.currentTimeMillis()%9000)/25.0f, 0, 0, 1);
gl.glTranslatef(-20, -20, 0);
- gl.glBegin(GL.GL_TRIANGLES);
-
gl.glColor3f(1, 1, 1);
- for(Triangle t : currentMap.getTriangleData()) {
- renderTriangle(gl, t);
+ for(int x = 0; x < currentMap.getWidth(); ++x) {
+ for(int y = 0; y < currentMap.getHeight(); ++y) {
+ gl.glPushMatrix();
+
+ gl.glTranslatef(currentMap.getTileSize()*x, currentMap.getTileSize()*y, currentMap.getTileHeight(x, y));
+ renderTile(gl, currentMap.getTile(x, y));
+
+ gl.glPopMatrix();
+ }
}
- gl.glEnd();
-
gl.glPopMatrix();
}
}