Noir
Noir

Reputation: 119

JOGL glBufferData with glVertexAttribPointer not working

I have a problem regarding glBufferData and glVertexAttribPointer. For some reason, they just don't work together. Here is the code:

    float[] triangleArray = {
            -1.0f, -1.0f, 0.0f,
            1.0f, -1.0f, 0.0f,
            0.0f, 1.0f, 0.0f    
    };

    IntBuffer vacantNameBuffer = IntBuffer.allocate(2);
    gl.glGenBuffers(1, vacantNameBuffer);
    int bufferIndex = vacantNameBuffer.get();

    FloatBuffer triangleVertexBuffer = Buffers.newDirectFloatBuffer(triangleArray);
    gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, bufferIndex);
    IntBuffer paramBuffer = IntBuffer.allocate(2);
    gl.glGetBufferParameteriv(GL2.GL_ARRAY_BUFFER, GL2.GL_BUFFER_SIZE, paramBuffer);
    System.out.println(paramBuffer.get());
    int triangleBufferSize = triangleVertexBuffer.capacity() * Buffers.SIZEOF_FLOAT;
    gl.glBufferData(
            GL2.GL_ARRAY_BUFFER, 
            triangleBufferSize,
            triangleVertexBuffer, 
            GL2.GL_STATIC_DRAW);
    gl.glGetBufferParameteriv(GL2.GL_ARRAY_BUFFER, GL2.GL_BUFFER_SIZE, paramBuffer);
    System.out.println(paramBuffer.get());
    gl.glEnableVertexAttribArray(0);
    gl.glVertexAttribPointer(
            0, 
            3, 
            GL2.GL_FLOAT, 
            false, 
            0, 
            0);
    gl.glDrawArrays(GL2.GL_TRIANGLES, 0, 3);
    gl.glDisableVertexAttribArray(0);

However, this works perfectly:

    float[] triangleArray = {
            -1.0f, -1.0f, 0.0f,
            1.0f, -1.0f, 0.0f,
            0.0f, 1.0f, 0.0f    
    };

    FloatBuffer triangleVertexBuffer = Buffers.newDirectFloatBuffer(triangleArray);
    /*
    IntBuffer vacantNameBuffer = IntBuffer.allocate(2);
    gl.glGenBuffers(1, vacantNameBuffer);
    int bufferIndex = vacantNameBuffer.get();
    gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, bufferIndex);
    IntBuffer paramBuffer = IntBuffer.allocate(2);
    gl.glGetBufferParameteriv(GL2.GL_ARRAY_BUFFER, GL2.GL_BUFFER_SIZE, paramBuffer);
    System.out.println(paramBuffer.get());
    int triangleBufferSize = triangleVertexBuffer.capacity() * Buffers.SIZEOF_FLOAT;
    gl.glBufferData(
            GL2.GL_ARRAY_BUFFER, 
            triangleBufferSize,
            triangleVertexBuffer, 
            GL2.GL_STATIC_DRAW);
    gl.glGetBufferParameteriv(GL2.GL_ARRAY_BUFFER, GL2.GL_BUFFER_SIZE, paramBuffer);
    System.out.println(paramBuffer.get());
    */
    gl.glEnableVertexAttribArray(0);
    gl.glVertexAttribPointer(
            0, 
            3, 
            GL2.GL_FLOAT, 
            false, 
            0, 
            triangleVertexBuffer);
    gl.glDrawArrays(GL2.GL_TRIANGLES, 0, 3);
    gl.glDisableVertexAttribArray(0);

If someone would be so kind as to point out why my code doesn't work. I would be very grateful.

Upvotes: 0

Views: 1771

Answers (1)

Noir
Noir

Reputation: 119

I found the problem, it was not with my code, but it's with the limitation on jogl that requires a gl shader program to be used. Found answer on this post: glDrawArrays() behaving weirdly on Mac OS X;

Upvotes: 1

Related Questions