Let’s say I want to upload unsigned integer and float data to the graphics card, in a single draw call. I use standard VBOs (not VAO, I’m using OpenGL 2.0), with the various vertex attribute arrays combined into the single GL_ARRAY_BUFFER, and pointed to individually using glVertexAttribPointer(...), so:
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId);
glEnableVertexAttribArray(positionAttributeId);
glEnableVertexAttribArray(myIntAttributeId);
glVertexAttribPointer(positionAttributeId, 4, GL_FLOAT, false, 0, 0);
glVertexAttribPointer(colorAttributeId, 4, GL_UNSIGNED_INT, false, 0, 128);
glClear(...);
glDraw*(...);
The problem I have here is that my buffer (ref’ed by vertexBufferId), has to be created as a FloatBuffer in LWJGL, so that it can support the attribute of type GL_FLOAT, and this would seem to preclude the use of GL_INT here (or else, the other way around – it’s either one or the other since the buffer cannot be of two types).
Any ideas? How would this be handled in native C code?
This would be handled in C (in a safe way) by doing this:
There are other ways of doing this in as well, which involve a lot of casting and so forth. But this code emulates what you’ll have to do in LWJGL.