VBO不会绘制大型数据集

时间:2014-08-22 01:29:08

标签: opengl glsl vbo vao large-data

我正在尝试在OpenGL中渲染大约100 000个值的大型数据集,现在只作为点,稍后使用精灵。

我的矢量"positions"的排序方式如下: +------------------------------------------------- | x | y | z | w | x | y | z | w | x | y | z | ... +------------------------------------------------- 其中第四个分量(w)是在顶点/片段着色器中使用的缩放因子..

VBO创建[编辑]

...
v_size = positions.size();
GLint positionAttrib = _programObject->attributeLocation("in_position");

glGenVertexArrays(1, &_vaoID);
glGenBuffers(1, &_vboID);

glBindVertexArray(_vaoID);

glBindBuffer(GL_ARRAY_BUFFER, _vboID);
glBufferData(GL_ARRAY_BUFFER, v_size*sizeof(GLfloat), &positions[0], GL_STATIC_DRAW);

glEnableVertexAttribArray(positionAttrib);
glVertexAttribPointer(positionAttrib, 4, GL_FLOAT, GL_FALSE, 4*sizeof(GLfloat), 0 );
glBindVertexArray(0);

渲染阶段:[编辑]

现在有效,但我不确定100%是否正确,随意批评:

GLint vertsToDraw = v_size / 4;
GLint positionAttrib = _programObject->attributeLocation("in_position");
// edit 1. added vao bind
glBindVertexArray(_vaoID); 
glEnableVertexAttribArray(positionAttrib);     
    glBindBuffer(GL_ARRAY_BUFFER, _vboID);
    //glVertexAttribPointer(positionAttrib, 4, GL_FLOAT, GL_FALSE, 4*sizeof(GLfloat), (void*)0);
    // edit 2. no stride
    glVertexAttribPointer(positionAttrib, 4, GL_FLOAT, GL_FALSE, 0, (void*)0); 
    glDrawArrays(GL_POINTS, 0, vertsToDraw);
glDisableVertexAttribArray(positionAttrib);
glBindVertexArray(0);

如果需要更多代码,请告诉我。

1 个答案:

答案 0 :(得分:0)

修正了derhass和keltar建议的所有内容,请参阅帖子评论。现在一切都有效。