glBufferData 在主函数之外不工作

glBufferData not working outside main function

我有一个不知道如何解决的问题。我将 C++ 与 GLEW 和 GLFW 一起使用,我初始化 GLFW,创建 window,使 window 成为当前上下文,然后我初始化 GLEW。所有这些都发生在主要功能上。

创建 VAO 和 VBO 的代码在方法中组织时出现问题,在 类 中,我看到生成了 VAO,生成了 VBO,但是当发送数据时到 GPU,使用 glBufferData,它不起作用。如果我将这段代码移到主函数中,一切正常,但在它之外,它不起作用。

此代码在 main 函数上运行良好,但如果我将它移到其他函数中,为了清楚起见,它就会停止运行。所以我认为这个问题在某种程度上与那个背景有关。我在主函数上创建 window 当前上下文。

有什么想法吗?

// MAIN FUNCTION

unsigned int vaoID;
glGenVertexArrays(1, &vaoID);
glBindVertexArray(vaoID);

// if I move this code in a method of a class and pass the vao, to bind it again //there it does not work
// if I leave it here, like this, it works
unsigned int vboID;
unsigned int attribPointer = 0;
glGenBuffers(1, &vboID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(attribPointer, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

// the drawing part, just the idea, it's in a while, of course.
glBindVertexArray(vaoID);
glEnableVertexAttribArray(attribPointer);
glDrawArrays(GL_TRIANGLES, 0, 6);

glDisableVertexAttribArray(attribPointer);
glBindVertexArray(0);
//if I move it here, it's dead
void storeDataInAttributeList(int attributeNumber, float data[], int vaoID)
    {
        glBindVertexArray(vaoID);
        unsigned int vboID;
        glGenBuffers(1, &vboID);
        vbos.push_back(vboID);
        glBindBuffer(GL_ARRAY_BUFFER, vboID);
        glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
        glVertexAttribPointer(attributeNumber, 3, GL_FLOAT, GL_FALSE, 0, 0);
        glBindBuffer(GL_ARRAY_BUFFER, 0);

    }

问题出在这里sizeof(data)

在你的方法中 data 是一个指针,sizeof(data) returns 指针的大小,而不是原始数组的大小。

为了解决问题,将大小作为参数与数据一起传递给方法。或者使用 std::vector<float> 而不是浮点数数组。