QGLBuffer和VBO

时间:2011-04-26 02:23:53

标签: c++ qt opengl qt4 vbo

我的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。 我做错了什么?

1 个答案:

答案 0 :(得分:2)

我想我已经解决了。每次我都要编辑VBO。 我必须

m_data = (CVert*)data->map (QGLBuffer::ReadWrite); 
m_data[pos].x = X1;
m_data[pos].y = y1 
data->unmap (); 

如果我只在构造函数中映射一次

,它就不起作用