如何有效地绘制单点

时间:2013-09-15 15:23:08

标签: c++ opengl opengl-3

我有一个我想要模拟的水面。为了向表面添加雨滴,我需要绘制一个点。

我有一个代码(在OpenGL 2.0中):

float rainDrop[3] = { pos }; 
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, rainDrop);
glDrawArrays(GL_POINTS, 0, 1);
glDisableVertexAttribArray(0);

如何将此代码移植到OpenGL 3. *?当然有效。

我的想法是只使用简单缓冲区(带一个元素)并映射它并绘制这个单点:

float rainDrop[3] = { pos }; 
glBindVertexArray(vaoID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferSubData(GL_ARRAY_BUFFER, 0, 3*sizeof(float), rainDrop);
glDrawArrays(GL_POINTS, 0, 1);
glBindVertexArray(0);

但也许另一种选择是有一个静态缓冲区并改变顶点着色器的统一值?

我不想改变我的'算法',所以让我们专注于绘制这一点。

1 个答案:

答案 0 :(得分:0)

通常,您在VBO中指定顶点坐标。在绘制少量基元时,选择哪个选项确实不应该有太大区别。与其他渲染操作相比,性能差异应该微不足道......