Opengl上一个对象消失了

时间:2013-03-13 08:58:16

标签: opengl opengl-es

当我创建2个或更多的TestLine类实例并将其添加到render类中时,只渲染最后一个。以前的对象不会渲染或消失

TestLine类:

void update(){
    glEnableClientState(GL_VERTEX_ARRAY);
    glBindBuffer(GL_VERTEX_ARRAY, xbo);
    glVertexPointer(2, GL_FLOAT, 0, 0);

    glDrawArrays(GL_LINES, 0, verts.size());
    glDisableClientState(GL_VERTEX_ARRAY);
}

void set(float x, float y, float x2, float y2){
    verts.push_back(x);
    verts.push_back(y);
    verts.push_back(x2);
    verts.push_back(y2);

   glGenBuffers(1, &xbo);
   glBindBuffer(GL_ARRAY_BUFFER, xbo);
   glBufferData(GL_ARRAY_BUFFER, verts.size() * sizeof(GLfloat), &verts[0], GL_STATIC_DRAW);
}

渲染类中的函数

void draw(){
    int size = lines.size();
    for(int i = 0; i < size; i++)
        lines[i]->update();
}
void add(TestLine* d){
    lines.push_back(d);
}

1 个答案:

答案 0 :(得分:2)

glBindBuffer(GL_VERTEX_ARRAY, xbo);

GL_VERTEX_ARRAY不是glBindBuffer()的有效参数:

  

target:指定缓冲区对象绑定的目标。符号常量必须为 GL_ARRAY_BUFFERGL_ELEMENT_ARRAY_BUFFERGL_PIXEL_PACK_BUFFERGL_PIXEL_UNPACK_BUFFER

在您的其他调用中使用GL_ARRAY_BUFFER


glDrawArrays(GL_LINES, 0, verts.size());

set()仅指定两个顶点,而不是四个。如果verts包含某种多浮点struct(例如:struct Vertex { float x, y; };)而不是原始float,则可能会有效。

试试这个:

glDrawArrays(GL_LINES, 0, verts.size() / 2);