2011-10-24 4 views
1

OpenGLを動作させるのに問題がありますが、基本的に黒とグレーの代替画面が表示されます。固定機能パイプライン(glBegin()、glEnd()、glTexCoord ...)を使ってうまく動作しています。私はこの問題を非常に間違っていると思います。どんな助けもありがとう。VBOが動作するようにする

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

奇妙なこと:あなたがVBOsを使用している場合

  • gl*Pointer()呼び出しは、ゼロベースの「ポインタ」の代わりに、本当のポインタを使用する必要があります。

  • Quad構造体はちょっと奇妙です。私はあなたが stride値を書くことを書くことができるとは思っていません。これらの配列を試してみてください。問題の一部を解決するために管理

struct Vertex 
{ 
    float x, y, z; 
    float s, t; 
    char r, g, b, a; 
}; 
関連する問題