使用GL_ELEMENT_ARRAY_BUFFER时的Java GLFW段错误

时间:2018-09-29 21:04:14

标签: java opengl segmentation-fault lwjgl glfw

每当我使用GL_ELEMENT_ARRAY_BUFFER绘制对象时,GLFW都会向我抛出glfwSwapBuffers();上的段错误

这是有问题的代码:

public Mesh( float[] verts, int[] indices ) {
    indicesCount = indices.length;

    vertexBuffer = glGenBuffers();
    elementBuffer = glGenBuffers();
    vertexArray = glGenVertexArrays();

    glBindVertexArray( vertexArray );
    glBindBuffer( GL_ARRAY_BUFFER, vertexBuffer );
    glBufferData( GL_ARRAY_BUFFER, verts, GL_STATIC_DRAW );

    glVertexAttribPointer( 0, 3, GL_FLOAT, false, 6 * 4, 0 * 4 );
    glEnableVertexAttribArray( 0 );

    glVertexAttribPointer( 1, 3, GL_FLOAT, false, 6 * 4, 3 * 4 );
    glEnableVertexAttribArray( 1 );

    // Uncommenting this code causes segfault
    //glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, elementBuffer );
    //glBufferData( elementBuffer, indices, GL_STATIC_DRAW );

    glBindVertexArray( 0 );
    glBindBuffer( GL_ARRAY_BUFFER, 0 );
    glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
}

public void draw() {
    glBindVertexArray( vertexArray );

    //glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, elementBuffer );
    //glDrawElements( GL_TRIANGLES, indicesCount, GL_UNSIGNED_INT, 0 );
    glDrawArrays( GL_TRIANGLES, 0, 3 );
    glBindVertexArray( 0 );
}

段错误是由以下代码引起的:

System.out.println( "Hello" );  // <- Would get printed 
glfwSwapBuffers( windowID );    // <- SIGSEGV
System.out.println( "Hello2" ); // <- Would not get printed

我正在使用最新的LWJGL版本3.2.0,尽管我也尝试过3.1.6,但无济于事。我完全迷失了,如果我什么都没做,我想我只需要坚持使用C ++,就可以使相同的代码在那里完美地工作。

1 个答案:

答案 0 :(得分:2)

glBufferData的第一个参数必须是绑定到缓冲区对象的目标(GL_ELEMENT_ARRAY_BUFFER),而不是命名缓冲区对象。 glBufferData影响绑定到目标的命名缓冲区。

使用以下代码解决您的问题:

glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, elementBuffer );
glBufferData( GL_ELEMENT_ARRAY_BUFFER, indices, GL_STATIC_DRAW );