2011-08-14 48 views
3

我不能工作了,爲什麼這個代碼是賽格斷層:與glBufferData段錯誤()

AxesMarker::AxesMarker(float size) 
    : size_(size), vbo_vertices_(0), vbo_elements_(0) 
{ 
    Vertex vertices[6] = { 
     Vertex(Color4f::RED, Vector3f::ZERO, Vector3f::ZERO), 
     Vertex(Color4f::RED, Vector3f::ZERO, Vector3f(size_, 0.0f, 0.0f)), 
     Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f::ZERO), 
     Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)), 
     Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f::ZERO), 
     Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)) }; 

    GLuint elements[6] = { 0, 1, 2, 3, 4, 5 }; 

    fprintf(stderr, "sizeof(vertices): %d, sizeof(Vertex): %d", (int) sizeof(vertices), (int) sizeof(Vertex)); 

    /* create buffers */ 
    glGenBuffers(1, &vbo_vertices_); 
    glGenBuffers(1, &vbo_elements_); 

    /* bind buffers */ 
    glBindBuffer(GL_ARRAY_BUFFER, vbo_vertices_); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo_elements_); 

    /* buffer data */ 
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW); 

    /* unbind buffers */ 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 
} 

編譯沒有警告,但似乎賽格斷層上的第一次調用glBufferData()。 如果有必要,我可以發佈更多的代碼,但我不太瞭解GL以瞭解可能相關的內容。 謝謝!


GLfloat vertices[60] = { 
    1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
    1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 
    0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 
    0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; 

收益率相同的賽格故障。

回答

4

您的Vertex類是普通的舊數據類型嗎?它是否有任何虛擬功能,這可能意味着它也有一個虛擬表格?你可以嘗試使用簡單的浮點數組重寫這段代碼,(只是爲了測試你的調用glBufferData正在工作)。從我可以告訴,雖然,它看起來像你正在使用glBufferData,但是我可能再次錯過了一些東西。

編輯: 您是否確信您的OpenGL上下文在調用此代碼之前已完全初始化。這是一個全局對象,因爲它的構造函數可能會在main之前調用?

+0

嘿男人......這是來自uni的Rhys。 –

+0

他們都是結構我會盡力。 –

+0

啊,所以這是真正的時間。那我最好不要再努力去幫助。 :) –