Trouble with glVertexArray and glDrawElements

Hi.

My first Jogl testes by manually drawing polygons (via glBegin, glVertex3f and so on) work fine. :slight_smile:
However using the faster glVertexPointer() and then glDrawElements() doesn’t do anything, except to throw exceptions to me after a while. :frowning:
From my former Gl4java tests I got the vertex array and the connection array. However moving this code to Jogl fails for me so far.
What am I doing wrong? Any hints appreciated. :slight_smile:

Here’s the relevant part:

// SIZE_FLOAT = 4
// SIZE_SHORT = 2

/** In some initialisation method */

// float mypoints[]   : holds each vertex (x, y, z)
ByteBuffer bbuffer = ByteBuffer.allocateDirect(mypoints.length * SIZE_FLOAT);
for (short i = 0; i < mypoints.length; i++) {
  bbuffer.putFloat(mypoints[i]);
}
bbuffer.rewind();
bufPoints = bbuffer.asFloatBuffer();

// short conns[]   : holds (0, 1, 2), (1, 2, 3) and so on.
ByteBuffer bbuffer = ByteBuffer.allocateDirect(conns.length * SIZE_SHORT);
for (short i = 0; i < conns.length; i++) {
  bbuffer.putShort(conns[i]);
}
bbuffer.rewind();
bufConns = bbuffer.asShortBuffer();

// and so on for colours, etc. The Buffers should be OK.


/** Now in the diplay() method */


gl.glEnableClientState(gl.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, gl.GL_FLOAT, 0, bufPoints);
// similar to colours, etc.
gl.glDrawElements(gl.GL_TRIANGLES, bufConns.limit(), gl.GL_SHORT, bufConns);

Do I have to use “gl.GL_UNSIGNED_SHORT” or “gl.GL_SHORT” in the DrawElements-call? None of them work for me. :wink:

By the way: do I really have to specify the Float_Size (4 Bytes on many machines) and Short_Size (2 bytes on many machines) ? However: if my Java application is to run on a platform where I don’t know its Float_Size?

Greetings and thank you.

-ric

Just a blind guess - maybe putting buffers in nativeOrder would help ?

[quote]Just a blind guess - maybe putting buffers in nativeOrder would help ?
[/quote]
Hi. I did now insert a line:
“bbuffer.order(ByteOrder.nativeOrder())”
before the “return bbuffer.asFloatBuffer()”
However unfortunately with no visible effect.
These low-level Buffers look to be too much for me…

You need to set the order before you fill the buffer.