QGLBuffer 和 VBO

发布于 2024-11-03 11:07:32 字数 1114 浏览 3 评论 0原文

我的 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[pos].x = X1
m_data[pos].y = y1

在绘制方法中更改了一些 m_data 值。

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

I have a problem with QGLBuffer. I'm trying to implement a dynamic VBO with QT + Opengl.

In the .h file

struct CVert {
   float x;                                                 
   float y;                                                 
};
...

typedef struct CVert CVert;     
CVert* m_data;
QGLBuffer* m_bufferData;
int m_size;

in the .cpp

Constructor.

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);

In the execution of the program I change some m_data values

m_data[pos].x = X1
m_data[pos].y = y1

In the draw method.

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);
}

But nothig it's being drawn.
I've checked that m_data is not null, and m_bufferData->bind() returns true.
What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

咆哮 2024-11-10 11:07:32

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

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

,如果我在构造函数中只映射一次,这是行不通的

I think i've solved. Every time i've to edit the VBO.
I have to

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

it's doesn't work if I map only once in the constructor

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文