OpenGL顶点缓冲区对象不起作用

时间:2015-10-03 23:52:38

标签: c++ opengl buffer sdl vertex

我遇到顶点缓冲区对象的问题,它似乎无法正常工作。 它没有在屏幕上显示任何内容。

这是我的代码:

void gl::glRecti(int x,int y,int w,int h,glColor *color)
{
    GLuint vbo = 0;

    GLfloat verts[] = 
    {
        x,y,
        x,y + h,
        x + w,y + h,
        x + w,y,
    };

    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    glEnableClientState(GL_VERTEX_ARRAY);

        glBindBuffer(GL_ARRAY_BUFFER,vbo);
            glVertexPointer( 4 , GL_FLOAT , sizeof(float) * 8, NULL );
            glDrawArrays(GL_QUADS,0,4);
        glBindBuffer(GL_ARRAY_BUFFER, 0);


    glDisableClientState(GL_VERTEX_ARRAY);

}
PS:我是OpenGL编程的新手。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的顶点指针没有意义:

glVertexPointer( 4 , GL_FLOAT , sizeof(float) * 8, NULL );

你告诉GL,每个顶点位置被指定为一个4维向量,并且两个连续顶点之间的偏移是8个浮点数。

你提供的是一个紧凑的二维位置数组,因此你应该使用2作为 size 参数,并使用2*sizeof(float)作为步幅(或0,这是一个thigly packed数组的快捷方式)。