2011-10-24 30 views
1

我有問題讓OpenGL工作,基本上我得到了替代的黑色和灰色屏幕。我使用固定功能管道(glBegin(),glEnd()和glTexCoord)工作正常......)我認爲我做了一些非常錯誤的事情,對於這個東西來說很新。任何幫助,將不勝感激。讓VBOs工作

struct Quad 
{ 
    float x0, y0, z0; // top left corner 
    float x1, y1, z1; // top right corner 
    float x2, y2, z2; // bottom left corner 
    float x3, y3, z3; // bottom right corner 
    float s0, t0; 
    float s1, t1; 
    float s2, t2; 
    float s3, t3; 
    char r, g, b, a; // tint 
    float depth;  // depth value of the Quad 
}; 

void draw{ 
    glEnable(GL_TEXTURE_2D); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    // Note: glVertexPointer is deprecated, change to glVertexAttribPointer 
    glVertexPointer(3, GL_FLOAT, sizeof(Quad), &(vertexBuffer_[0].x0)); 
    glTexCoordPointer(2, GL_FLOAT, sizeof(Quad), &(vertexBuffer_[0].s0)); 
    glBindBuffer(GL_ARRAY_BUFFER, VBOs_[activeVBO_]); 
    glBufferData(GL_ARRAY_BUFFER, vertexBuffer_.size() * sizeof(Quad), &(vertexBuffer_[0]), GL_STATIC_DRAW); 
    glDrawArrays(GL_QUADS, 0, vertexBuffer_.size()); 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
    SDL_GL_SwapBuffers(); 
    activeVBO_ = (++activeVBO_)%NUM_VBO; 
    glError(); 
} 
+0

設法解決的一些問題 - 除了什麼genpfault指出的那樣,我也錯失接聽電話以清除(),因此幀緩衝沒有被重置。 – aCuria

回答

5

你似乎在嘗試使用頂點數組和VBO的奇怪組合。嘗試this walkthrough

奇怪的事情:

  • gl*Pointer()調用應該,如果你正在使用維也納組織使用從零開始的「指針」,而不是真正的指針。

  • 你的Quad結構是有點怪異的。我不太確定你可以寫 可用的stride值。嘗試這些數組:

struct Vertex 
{ 
    float x, y, z; 
    float s, t; 
    char r, g, b, a; 
};