Как заставить VBO работать - PullRequest
       2

Как заставить VBO работать

1 голос
/ 24 октября 2011

У меня проблемы с запуском OpenGL, в основном я получаю чередующиеся черные и серые экраны. У меня это работает нормально, используя фиксированный конвейер функций (glBegin (), glEnd () и glTexCoord ...) Я думаю, что я делаю что-то очень неправильно, довольно плохо знакомый с этим материалом. Любая помощь будет оценена.

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();
}

1 Ответ

5 голосов
/ 24 октября 2011

Вы, кажется, пытаетесь использовать какую-то странную комбинацию массивов вершин и VBO.Попробуйте это пошаговое руководство .

Странные вещи:

  • gl*Pointer() вызовы должны использовать основанные на нуле "указатели" вместо реальных указателей, если выВы используете VBO.

  • Ваша Quad структура довольно странная.Я не совсем уверен, что вы можете написать пригодные stride значения для него.Попробуйте массив из них:

struct Vertex
{
    float x, y, z;
    float s, t;
    char r, g, b, a;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...