2016-01-19 77 views
1

我試圖按照[這裏] [1]簡單的教程,但我在到達「調用glDrawArrays」收到以下錯誤:調用glDrawArrays訪問衝突

在0x03D7598E(nvoglv32.dll)在openGLTest.exe未處理的異常: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 
} 

我不知道是什麼導致它作爲教程是相同的!

+0

我還在尋找過的代碼,但在一個預感,會發​​生什麼如果你刪除'delete []頂點;'? – Xirema

+0

我刪除它,但仍然發生相同的訪問衝突。 – Calco

+0

好的。 OpenGL在幕後做了有趣的事情,所以排除這樣的東西是很好的。 – Xirema

回答

2

多次實驗後,我通過改變第一線修復了這個問題

delete[] vertices; 
+1

你可能沒有修復它,而是讓錯誤難以重現。 – Sam

4

在處理OpenGL時,訪問衝突讀取位置0通常意味着您的OpenGL API掛鉤未正確建立。 GLEW是否在代碼中正確設置?您是否撥打glewInit()並確認結果爲GL_TRUE?在當前上下文之前或之後調用glewInit()?驗證所有這些事情,並且它應該解決問題。

float vertices[18]; 

和刪除:

+0

我在我的'int InitGL(GLvoid)'方法中調用glewInit(),該方法設置了諸如'glShadeModel(GL_SMOOTH)'或'glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST)'之類的東西。這不是太早嗎?它給出了GLEW_OK,似乎沒有放入錯誤檢查。更新主要問題以顯示此內容。 – Calco