glBufferData在主要功能之外无法正常工作

问题描述

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

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

此代码在主要功能上可以完美运行,但是如果我将其移至其他功能上,只是为了使情况更清楚,它就会停止工作。因此,我认为问题与该上下文有某种联系。我在主函数上创建窗口,即当前上下文。

有什么想法吗?

// 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);
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,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,0);
        glBindBuffer(GL_ARRAY_BUFFER,0);

    }

解决方法

问题出在这里sizeof(data)

方法data中有一个指针,sizeof(data)返回该指针的大小,而不是原始数组的大小。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...