当我创建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);
}
答案 0 :(得分:2)
glBindBuffer(GL_VERTEX_ARRAY, xbo);
GL_VERTEX_ARRAY
不是glBindBuffer()
的有效参数:
target
:指定缓冲区对象绑定的目标。符号常量必须为GL_ARRAY_BUFFER
,GL_ELEMENT_ARRAY_BUFFER
,GL_PIXEL_PACK_BUFFER
或GL_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);