2013-03-13 71 views
1

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

测试线类:

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

这是有关桌面OpenGL或OpenGL ES的? – 2013-03-13 09:10:24

+0

我希望它可以在opengl和gles1.x中运行 – tambalolo 2013-03-13 11:59:50

+1

发布TestLine类的全部内容。 – genpfault 2013-03-13 13:57:15

回答

2
glBindBuffer(GL_VERTEX_ARRAY, xbo); 

GL_VERTEX_ARRAY不是glBindBuffer()有效参数:

target:指定缓冲区对象绑定到的目标。符号常数必须是GL_ARRAY_BUFFER,GL_ELEMENT_ARRAY_BUFFER,GL_PIXEL_PACK_BUFFERGL_PIXEL_UNPACK_BUFFER

在您的其他调用中使用GL_ARRAY_BUFFER


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

set()唯一指定顶点,而不是四个。如果verts包含某种多浮点数struct(例如:struct Vertex { float x, y; };)而不是原始的floats,这将会起作用。

试试这个:

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

我已经进入了这一整天,甚至没有注意到我把GL_VERTEX_ARRAY作为glBindBuffer()的参数..也许因为它仍然呈现1行.. -_-谢谢。 – tambalolo 2013-03-13 22:41:28