呈现循环之外的glBufferData()不起作用

时间:2019-06-23 13:38:07

标签: c++ opengl

我有一个与顶点缓冲区对象相关联的浮点顶点数组,用于绘制立方体。顶点阵列中交错的是与每个顶点关联的颜色。

main()内的渲染循环中,我每个n渲染循环都调用一个函数来更新顶点数组中的颜色。浮点顶点数组变量由指针传递。一旦颜色被更新并且仍在更新功能中,我将调用glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW)。发生这种情况时,多维数据集消失。

但是,如果函数仅更新颜色,然后返回渲染循环,则使用相同的参数调用glBufferData(),立方体颜色会更新,并且立方体仍然可见。

我尝试在颜色更新功能中重新绑定顶点缓冲区对象,但这不起作用。

在我看来,渲染循环中的OpenGL顶点缓冲对象与它本身在main()中存在某种关联,当在外部函数中调用glBufferData()时,该关联会丢失。

main()中的呈现循环中,有效的代码是

if (faceColorLoopCounter > faceColorDuration) {

    faceColorLoopCounter = 0;
    IncrementVertexColors(verticesColorAngles, vertices);

    // Added here to make colors change periodically.
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

}

其中颜色已更改并且我尝试放置glBufferData()的位置的功能是

void IncrementVertexColors(double* verticesColorAngles, float* vertices) {

    for (int rowIndex = 0; rowIndex < 7; rowIndex++) {

        for (int colIndex = 3; colIndex < 6; colIndex++) {

            IncrementVertexColorComponent(verticesColorAngles[rowIndex * 6 + colIndex], vertices[rowIndex * 6 + colIndex]);
        }
    }

    //glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
}

其中glBufferData()被注释掉了,因为它在这里不起作用。 IncrementVertexColorComponent()一次更改一种颜色。

我迷失了解释。我想念什么?

0 个答案:

没有答案