GL2ES2.glVertexAttribPointer() comes in two versions, one that takes a Buffer and one that takes a long. The long is interpreted as an offset in a bound VBO. In the latest OpenGL, glVertexAttribIPointer() is also supposed to be able to take an offset that's just an integer, but JOGL's GL interfaces do not expose a version of the method that does that. It appears that the same problem exists with glVertexAttribLPointer(), incidentally.
In the thread http://forum.jogamp.org/Where-is-glVertexAttribIPointer-that-doesn-t-take-a-Buffer-td4026005.html , Sven Gothel comments:
> but my
> main question is something else: In the process of fiddling with this I
> learned about glVertexAttribIPointer() which seemed like something I ought to
> try, since I was passing ints and that function seems to be specialized for
> ints or something. But the interfaces GL4 and GL3 seem to lack
> glVertexAttribIPointer(int, int, int, int, long). I'm using a GL3, which
> should have that method. What's the problem?
I see, the code generation for this method doesn't match the GL3 spec,
where (both) glVertexAttribIPointer(..)'s and glVertexAttribPointer(..)'s
'void *pointer' argument is an offset to a bound VBO (GL_ARRAY_BUFFER).
GL2 spec (and the GL2/GL3 compatibility profile) define
glVertexAttribPointer(..)'s 'void *pointer' argument
either as a direct data source, _or_ as an offset if a VBO (GL_ARRAY_BUFFER) is bound.
fixed in jogl commit 3c09f42d372f89bdb41ab4cf2f96962971ad909a