2011-04-26 2 views
2

QGLBuffer에 문제가 있습니다. QT + OpenGL을 사용하여 동적 VBO를 구현하려고합니다. 통화 당QGLBuffer 및 VBO

생성자의 .H 파일

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

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

에서

. 프로그램의 실행에

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를 반환했는지 확인했습니다. 내가 뭘 잘못하고 있니?

답변

2

내가 해결했다고 생각합니다. VBO를 편집 할 때마다. 나는 내가 [`glMapBuffer` 문서]에 분명히 있어요 생성자

+0

(http://www.opengl.org/sdk에 한 번만 매핑 경우 작동하지 않는 것

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

에 있습니다 /docs/man/xhtml/glMapBuffer.xml) : "매핑 된 데이터 저장소는 버퍼 객체를 사용하기 전에 glUnmapBuffer를 사용하여 매핑을 해제해야합니다. 그렇지 않으면 버퍼 객체의 데이터 저장소를 역 참조하려고하는 GL 명령에서 오류가 생성됩니다." –

+0

네 말이 맞아. 나는 거기에서 그것을 읽었다. –

관련 문제