Ошибка Java GLFW при использовании GL_ELEMENT_ARRAY_BUFFER - PullRequest
0 голосов
/ 30 сентября 2018

Всякий раз, когда я использую 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 голосов
/ 30 сентября 2018

1-й параметр glBufferData должен быть целью (GL_ELEMENT_ARRAY_BUFFER), с которой связан буферный объект, а не именованным буферным объектом.glBufferData влияет на именованный буфер, который привязан к цели.

Используйте следующий код для решения вашей проблемы:

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