gpt4 book ai didi

使用 GL_ELEMENT_ARRAY_BUFFER 时的 Java GLFW 段错误

转载 作者:行者123 更新时间:2023-11-30 02:01:52 25 4
gpt4 key购买 nike

每当我使用 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++,因为相同的代码在那里可以完美地工作。

最佳答案

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

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

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

关于使用 GL_ELEMENT_ARRAY_BUFFER 时的 Java GLFW 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52572533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com