From bf55e843dba2f8808817e756ccce0ea49c4d45b5 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Tue, 16 Oct 2012 16:35:59 +0200 Subject: Fix QGL for ES1/ES2: Use ushort indices, since uint is n/a on ES1/ES2 profile glDrawElements(int mode, IntBuffer indices) -> glDrawElements(int mode, ShortBuffer indices) --- src/jake2/qcommon/qfiles.java | 4 ++-- src/jake2/render/fast/Mesh.java | 3 ++- src/jake2/render/fast/Model.java | 8 ++++---- src/jake2/render/opengl/CountGL.java | 2 +- src/jake2/render/opengl/DummyGL.java | 6 ++---- src/jake2/render/opengl/JoglGL2.java | 5 +++-- src/jake2/render/opengl/JoglGL2ES1.java | 7 ++++--- src/jake2/render/opengl/QGL.java | 2 +- src/jake2/util/Lib.java | 21 +++++++++++++++------ 9 files changed, 34 insertions(+), 24 deletions(-) (limited to 'src/jake2') diff --git a/src/jake2/qcommon/qfiles.java b/src/jake2/qcommon/qfiles.java index 67271df..11d5e6d 100644 --- a/src/jake2/qcommon/qfiles.java +++ b/src/jake2/qcommon/qfiles.java @@ -280,9 +280,9 @@ public class qfiles { * new members for vertex array handling */ public FloatBuffer textureCoordBuf = null; - public IntBuffer vertexIndexBuf = null; + public ShortBuffer vertexIndexBuf = null; public int[] counts = null; - public IntBuffer[] indexElements = null; + public ShortBuffer[] indexElements = null; } /* diff --git a/src/jake2/render/fast/Mesh.java b/src/jake2/render/fast/Mesh.java index a2e9268..547be66 100644 --- a/src/jake2/render/fast/Mesh.java +++ b/src/jake2/render/fast/Mesh.java @@ -36,6 +36,7 @@ import jake2.util.Math3D; import java.nio.FloatBuffer; import java.nio.IntBuffer; +import java.nio.ShortBuffer; /** * Mesh @@ -228,7 +229,7 @@ public abstract class Mesh extends Light { int pos = 0; int[] counts = paliashdr.counts; - IntBuffer srcIndexBuf = null; + ShortBuffer srcIndexBuf = null; FloatBuffer dstTextureCoords = textureArrayBuf; FloatBuffer srcTextureCoords = paliashdr.textureCoordBuf; diff --git a/src/jake2/render/fast/Model.java b/src/jake2/render/fast/Model.java index 93180d5..15e8107 100644 --- a/src/jake2/render/fast/Model.java +++ b/src/jake2/render/fast/Model.java @@ -1287,12 +1287,12 @@ public abstract class Model extends Surf { */ static final int MODEL_BUFFER_SIZE = 50000; static FloatBuffer globalModelTextureCoordBuf = Lib.newFloatBuffer(MODEL_BUFFER_SIZE * 2); - static IntBuffer globalModelVertexIndexBuf = Lib.newIntBuffer(MODEL_BUFFER_SIZE); + static ShortBuffer globalModelVertexIndexBuf = Lib.newShortBuffer(MODEL_BUFFER_SIZE); void precompileGLCmds(qfiles.dmdl_t model) { model.textureCoordBuf = globalModelTextureCoordBuf.slice(); model.vertexIndexBuf = globalModelVertexIndexBuf.slice(); - Vector tmp = new Vector(); + final Vector tmp = new Vector(); int count = 0; int[] order = model.glCmds; @@ -1320,7 +1320,7 @@ public abstract class Model extends Surf { // texture coordinates come from the draw list globalModelTextureCoordBuf.put(Float.intBitsToFloat(order[orderIndex + 0])); globalModelTextureCoordBuf.put(Float.intBitsToFloat(order[orderIndex + 1])); - globalModelVertexIndexBuf.put(order[orderIndex + 2]); + globalModelVertexIndexBuf.put( (short) ( 0x0000FFFF & order[orderIndex + 2] ) ); orderIndex += 3; } while (--count != 0); @@ -1329,7 +1329,7 @@ public abstract class Model extends Surf { int size = tmp.size(); model.counts = new int[size]; - model.indexElements = new IntBuffer[size]; + model.indexElements = new ShortBuffer[size]; count = 0; int pos = 0; diff --git a/src/jake2/render/opengl/CountGL.java b/src/jake2/render/opengl/CountGL.java index 2752916..a671747 100644 --- a/src/jake2/render/opengl/CountGL.java +++ b/src/jake2/render/opengl/CountGL.java @@ -102,7 +102,7 @@ public class CountGL implements QGL { ++count; } - public void glDrawElements(int mode, IntBuffer indices) { + public void glDrawElements(int mode, ShortBuffer indices) { ++count; } diff --git a/src/jake2/render/opengl/DummyGL.java b/src/jake2/render/opengl/DummyGL.java index 45cc9df..b7d4c58 100644 --- a/src/jake2/render/opengl/DummyGL.java +++ b/src/jake2/render/opengl/DummyGL.java @@ -1,8 +1,6 @@ package jake2.render.opengl; -import java.nio.ByteBuffer; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; +import java.nio.*; public class DummyGL implements QGL { @@ -101,7 +99,7 @@ public class DummyGL implements QGL { // do nothing } - public void glDrawElements(int mode, IntBuffer indices) { + public void glDrawElements(int mode, ShortBuffer indices) { // do nothing } diff --git a/src/jake2/render/opengl/JoglGL2.java b/src/jake2/render/opengl/JoglGL2.java index a1d1b17..d078585 100644 --- a/src/jake2/render/opengl/JoglGL2.java +++ b/src/jake2/render/opengl/JoglGL2.java @@ -3,6 +3,7 @@ package jake2.render.opengl; import java.nio.*; +import javax.media.opengl.GL; import javax.media.opengl.GL2; public class JoglGL2 implements QGL { @@ -102,8 +103,8 @@ public class JoglGL2 implements QGL { gl.glDrawBuffer(mode); } - public void glDrawElements(int mode, IntBuffer indices) { - gl.glDrawElements(mode, indices.limit(), GL_UNSIGNED_INT, indices); + public void glDrawElements(int mode, ShortBuffer indices) { + gl.glDrawElements(mode, indices.remaining(), GL.GL_UNSIGNED_SHORT, indices); } public void glEnable(int cap) { diff --git a/src/jake2/render/opengl/JoglGL2ES1.java b/src/jake2/render/opengl/JoglGL2ES1.java index 605c152..94c0c45 100644 --- a/src/jake2/render/opengl/JoglGL2ES1.java +++ b/src/jake2/render/opengl/JoglGL2ES1.java @@ -172,7 +172,7 @@ public class JoglGL2ES1 implements QGL { } } - public void glDrawElements(int mode, IntBuffer indices) { + public void glDrawElements(int mode, ShortBuffer indices) { switch(mode) { case GL_QUAD_STRIP: mode=GL.GL_TRIANGLE_STRIP; @@ -184,11 +184,12 @@ public class JoglGL2ES1 implements QGL { final int idxLen = indices.remaining(); if ( GL_QUADS == mode && !gl.isGL2() ) { final int idx0 = indices.position(); + final ShortBuffer b = (ShortBuffer) indices; for (int j = 0; j < idxLen; j++) { - gl.glDrawArrays(GL.GL_TRIANGLE_FAN, (int)(0xffffffff & indices.get(idx0+j)), 4); + gl.glDrawArrays(GL.GL_TRIANGLE_FAN, (int)(0x0000ffff & b.get(idx0+j)), 4); } } else { - gl.glDrawElements(mode, idxLen, GL_UNSIGNED_INT, indices); + gl.glDrawElements(mode, idxLen, GL.GL_UNSIGNED_SHORT, indices); } } diff --git a/src/jake2/render/opengl/QGL.java b/src/jake2/render/opengl/QGL.java index 81efe59..ca0c4dd 100644 --- a/src/jake2/render/opengl/QGL.java +++ b/src/jake2/render/opengl/QGL.java @@ -60,7 +60,7 @@ public interface QGL extends QGLConst { void glDrawBuffer(int mode); - void glDrawElements(int mode, IntBuffer indices); + void glDrawElements(int mode, ShortBuffer indices); void glEnable(int cap); diff --git a/src/jake2/util/Lib.java b/src/jake2/util/Lib.java index 37ab5c8..173d998 100644 --- a/src/jake2/util/Lib.java +++ b/src/jake2/util/Lib.java @@ -353,6 +353,7 @@ public class Lib { public static final int SIZEOF_FLOAT = 4; public static final int SIZEOF_INT = 4; + public static final int SIZEOF_SHORT = 2; public static FloatBuffer newFloatBuffer(int numElements) { ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT); @@ -362,13 +363,21 @@ public class Lib { ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT, order); return bb.asFloatBuffer(); } - public static IntBuffer newIntBuffer(int numElements) { - ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT); - return bb.asIntBuffer(); + public static IntBuffer newIntBuffer(int numElements) { + ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT); + return bb.asIntBuffer(); + } + public static IntBuffer newIntBuffer(int numElements, ByteOrder order) { + ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT, order); + return bb.asIntBuffer(); + } + public static ShortBuffer newShortBuffer(int numElements) { + ByteBuffer bb = newByteBuffer(numElements * SIZEOF_SHORT); + return bb.asShortBuffer(); } - public static IntBuffer newIntBuffer(int numElements, ByteOrder order) { - ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT, order); - return bb.asIntBuffer(); + public static ShortBuffer newShortBuffer(int numElements, ByteOrder order) { + ByteBuffer bb = newByteBuffer(numElements * SIZEOF_SHORT, order); + return bb.asShortBuffer(); } public static ByteBuffer newByteBuffer(int numElements) { ByteBuffer bb = ByteBuffer.allocateDirect(numElements); -- cgit v1.2.3