c++ - glDrawArrays 访问冲突

标签 c++ opengl visual-studio-2013 gldrawarrays

我正在尝试遵循 [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 的 Hook 。您的代码中是否正确设置了 GLEW?您是否调用了 glewInit() 并验证结果是否为 GL_TRUEglewInit() 是在使上下文成为当前上下文之前还是之后被调用的?验证所有这些事情,它应该可以解决问题。

关于c++ - glDrawArrays 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34883985/

相关文章:

OpenGL 2.0 与 GL_ARB_vertex_program

c++ - OpenGL 累积缓冲区不工作

c - 在 Visual Studio 2013 中使用 strcpy()

c# - VS2013 Intellisense 不断停止工作

c++ - 琐碎的可破坏性和调用析构函数的必要性

c++ - 为什么在使用临时对象访问时引用类型是左值?

c++ - 使用 ShellExecuteEx 并捕获标准输入/输出/错误

opengl - GPU 如何同时支持 OpenGL 和 DirectX API 执行?

c# - 如何使用 .mdf 文件公开 C# 项目

c++ - 为什么在 C++ 中必须从 void 指针进行类型转换?