Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QGLBuffer与VBO_C++_Qt_Opengl_Qt4_Vbo - Fatal编程技术网

C++ QGLBuffer与VBO

C++ QGLBuffer与VBO,c++,qt,opengl,qt4,vbo,C++,Qt,Opengl,Qt4,Vbo,我的QGLBuffer有问题。我正在尝试用QT+Opengl实现一个动态VBO 在.h文件中 struct CVert { float x; float y; }; ... typedef struct CVert CVert; CVert* m_data; QGLBuffer*

我的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_数据值

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_数据是否不为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 (); 
如果我在构造函数中只映射一次,这是不起作用的,这在“使用缓冲区对象之前,映射的数据存储必须使用glUnmapBuffer取消映射。否则,任何试图取消引用缓冲区对象数据存储的GL命令都会生成错误。”