glDrawArrays 访问冲突
glDrawArrays Access Violation
我正在尝试遵循 [this][1] 简单教程,但在到达 'glDrawArrays' 时出现以下错误:
openGLTest.exe 中 0x03D7598E (nvoglv32.dll) 的未处理异常:0xC0000005:读取位置 0x00000000 的访问冲突。
void createMesh(void) {
float* vertices = new float[18];// Amount of vertices
vertices[0] = -0.5; vertices[1] = -0.5; vertices[2] = 0.0; // Bottom left corner
vertices[3] = -0.5; vertices[4] = 0.5; vertices[5] = 0.0; // Top left corner
vertices[6] = 0.5; vertices[7] = 0.5; vertices[8] = 0.0; // Top Right corner
vertices[9] = 0.5; vertices[10] = -0.5; vertices[11] = 0.0; // Bottom right corner
vertices[12] = -0.5; vertices[13] = -0.5; vertices[14] = 0.0; // Bottom left corner
vertices[15] = 0.5; vertices[16] = 0.5; vertices[17] = 0.0; // Top Right corner
glGenVertexArrays(1, &vaoID[0]); // Create our Vertex Array Object
glBindVertexArray(vaoID[0]); // Bind our Vertex Array Object so we can use it
glGenBuffers(1, vboID); // Generate our Vertex Buffer Object
glBindBuffer(GL_ARRAY_BUFFER, vboID[0]); // Bind our Vertex Buffer Object
glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); // Set the size and data of our VBO and set it to STATIC_DRAW
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0); // Set up our vertex attributes pointer
glEnableVertexAttribArray(0); // Disable our Vertex Array Object
glBindVertexArray(0); // Disable our Vertex Buffer Object
delete[] vertices; // Delete our vertices from memory
glBindVertexArray(vaoID[0]); // Bind our Vertex Array Object
glDrawArrays(GL_TRIANGLES, 0, 6); // Draw our square
glBindVertexArray(0); // Unbind our Vertex Array Object
}
我不知道是什么原因造成的,因为教程是一样的!
在处理 OpenGL 时,读取位置 0 的访问冲突通常意味着您未正确建立到 OpenGL API 的挂钩。您的代码中是否正确设置了 GLEW?您是否调用 glewInit()
并验证结果是 GL_TRUE
? glewInit()
是在使上下文成为当前上下文之前还是之后被调用的?验证所有这些事情,它应该可以解决问题。
经过大量实验后,我将第一行更改为:
从而解决了这个问题
float vertices[18];
并删除:
delete[] vertices;
我在使用glDraw时遇到了同样的错误。我通过先绑定 VertexArray 然后绑定 IndexBuffer
来修复它
我正在尝试遵循 [this][1] 简单教程,但在到达 'glDrawArrays' 时出现以下错误:
openGLTest.exe 中 0x03D7598E (nvoglv32.dll) 的未处理异常:0xC0000005:读取位置 0x00000000 的访问冲突。
void createMesh(void) {
float* vertices = new float[18];// Amount of vertices
vertices[0] = -0.5; vertices[1] = -0.5; vertices[2] = 0.0; // Bottom left corner
vertices[3] = -0.5; vertices[4] = 0.5; vertices[5] = 0.0; // Top left corner
vertices[6] = 0.5; vertices[7] = 0.5; vertices[8] = 0.0; // Top Right corner
vertices[9] = 0.5; vertices[10] = -0.5; vertices[11] = 0.0; // Bottom right corner
vertices[12] = -0.5; vertices[13] = -0.5; vertices[14] = 0.0; // Bottom left corner
vertices[15] = 0.5; vertices[16] = 0.5; vertices[17] = 0.0; // Top Right corner
glGenVertexArrays(1, &vaoID[0]); // Create our Vertex Array Object
glBindVertexArray(vaoID[0]); // Bind our Vertex Array Object so we can use it
glGenBuffers(1, vboID); // Generate our Vertex Buffer Object
glBindBuffer(GL_ARRAY_BUFFER, vboID[0]); // Bind our Vertex Buffer Object
glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); // Set the size and data of our VBO and set it to STATIC_DRAW
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0); // Set up our vertex attributes pointer
glEnableVertexAttribArray(0); // Disable our Vertex Array Object
glBindVertexArray(0); // Disable our Vertex Buffer Object
delete[] vertices; // Delete our vertices from memory
glBindVertexArray(vaoID[0]); // Bind our Vertex Array Object
glDrawArrays(GL_TRIANGLES, 0, 6); // Draw our square
glBindVertexArray(0); // Unbind our Vertex Array Object
}
我不知道是什么原因造成的,因为教程是一样的!
在处理 OpenGL 时,读取位置 0 的访问冲突通常意味着您未正确建立到 OpenGL API 的挂钩。您的代码中是否正确设置了 GLEW?您是否调用 glewInit()
并验证结果是 GL_TRUE
? glewInit()
是在使上下文成为当前上下文之前还是之后被调用的?验证所有这些事情,它应该可以解决问题。
经过大量实验后,我将第一行更改为:
从而解决了这个问题float vertices[18];
并删除:
delete[] vertices;
我在使用glDraw时遇到了同样的错误。我通过先绑定 VertexArray 然后绑定 IndexBuffer
来修复它