我对QGLBuffer有问题。我正在尝试使用QT + Opengl实现动态VBO。
在.h文件中
struct CVert {
float x;
float y;
};
...
typedef struct CVert CVert;
CVert* m_data;
QGLBuffer* m_bufferData;
int m_size;
在.cpp中
构造函数。
m_size = numberOfVertex;
m_bufferData = new QGLBuffer(QGLBuffer::VertexBuffer);
m_bufferData->create();
m_bufferData->bind();
m_bufferData->setUsagePattern(QGLBuffer::DynamicDraw);
m_bufferData->allocate(2*sizeof(float)* p_size);
m_data = (CVert*)m_bufferData->map (QGLBuffer::ReadWrite);
在程序执行中,我更改了一些m_data值
m_data[pos].x = X1
m_data[pos].y = y1
在绘制方法中。
glEnableClientState(GL_VERTEX_ARRAY);
if (m_bufferData->bind ()) {
glVertexPointer( 2, GL_FLOAT, 0, (char *) NULL );;
glDrawArrays( GL_LINES, 0,m_size );
glDisableClientState(GL_VERTEX_ARRAY);
}
但是,没有被吸引。
我检查了m_data不为null,并且m_bufferData-> bind()返回true。
我究竟做错了什么?
最佳答案
我想我已经解决了。每次我都要编辑VBO。
我必须
m_data = (CVert*)data->map (QGLBuffer::ReadWrite);
m_data[pos].x = X1;
m_data[pos].y = y1
data->unmap ();
如果我在构造函数中只映射一次,那是行不通的