如何频繁更新顶点缓冲区数据(每帧)opengl [重复]

问题描述 投票:0回答:1

我在屏幕上显示一个简单的二维三角形,我想每帧更新颜色缓冲区数据,因此三角形的颜色不断变化,但我不知道如何有效地更新数据。

这是颜色缓冲区的代码:

GLfloat colourVert[] = {
        0.0f, 1.0f, 0.0f,
        1.0f, 0.0f, 0.0f,
        0.0f, 0.0f, 1.0f
    };



GLuint colourBuffer;
glGenBuffers(1, &colourBuffer);
glBindBuffer(GL_ARRAY_BUFFER, colourBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(colourVert), colourVert, GL_DYNAMIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);

我需要在这些行中添加一些内容还是需要修改着色器,有人可以解释一下,谢谢您的帮助。

c++ opengl opengl-es
1个回答
9
投票

你绝对不应该每帧生成一个新的缓冲区。只需重复使用已有的即可。此外,属性指针的设置只需完成一次,因为它们存储在 VAO 中。实际需要的唯一两行是

glBindBuffer
glBufferData
(或者更好地使用
glBufferSubData
,因为这将重用分配的内存而不是分配新的内存段)。

请注意,此答案仅适用于 OpenGL 3.3 Core(及更高版本)和 OpenGL-ES 3.0(及更高版本)。对于不支持/不需要 VAO 的 OpenGL 版本,属性设置可能还必须在每一帧中进行。

© www.soinside.com 2019 - 2024. All rights reserved.