QGLBuffer и VBO - PullRequest
       14

QGLBuffer и VBO

2 голосов
/ 26 апреля 2011

У меня проблема с QGLBuffer. Я пытаюсь реализовать динамический VBO с QT + OpenGL.

В файле .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 не является нулевым, и m_bufferData-> bind () возвращает true. Что я делаю не так?

1 Ответ

2 голосов
/ 26 апреля 2011

Я думаю, что я решил. Каждый раз, когда я должен редактировать VBO. Я должен

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

это не работает, если я отображаю только один раз в конструкторе

...