C++ glBufferSubData导致未处理的异常:0xC0000005
我正在尝试使用vao和vbo创建一个网格类 首先,我创建向量来保存要缓冲的数据:C++ glBufferSubData导致未处理的异常:0xC0000005,c++,opengl-4,C++,Opengl 4,我正在尝试使用vao和vbo创建一个网格类 首先,我创建向量来保存要缓冲的数据: std::vector<GLfloat> vertices; std::vector<GLfloat> normals; std::vector<GLfloat> texCoords; std::vector<GLushort> indices; 我尝试像这样填充缓冲区: // Reserve space on the GPU (3 GLfloats per ver
std::vector<GLfloat> vertices;
std::vector<GLfloat> normals;
std::vector<GLfloat> texCoords;
std::vector<GLushort> indices;
我尝试像这样填充缓冲区:
// Reserve space on the GPU (3 GLfloats per vertex, 3 per normal and 2 per texCoord)
glBufferData(GL_ARRAY_BUFFER, vertices.size() * 8 * sizeof(GLfloat), NULL, GL_STATIC_DRAW);
// Load data to the GPU
// Insert vertices at the beginning of the buffer
glBufferSubData(GL_ARRAY_BUFFER, NULL, vertices.size()*3*sizeof(GLfloat), &vertices);
// Insert normals behind vertices
glBufferSubData(GL_ARRAY_BUFFER, vertices.size()*3*sizeof(GLfloat), normals.size()*3*sizeof(GLfloat), &normals);
// Insert texCoords behind normals
glBufferSubData(GL_ARRAY_BUFFER, (vertices.size() + normals.size())*3*sizeof(GLfloat), texCoords.size()*2*sizeof(GLfloat), &texCoords);
// Load the index buffer
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size()*3*sizeof(GLushort), &indices, GL_STATIC_DRAW);
当我尝试缓冲正常数据时,它会中断:
glBufferSubData(GL_ARRAY_BUFFER, vertices.size()*3*sizeof(GLfloat), normals.size()*3*sizeof(GLfloat), &normals);
我得到这个错误:
Unhandled exception at 0x699CEF38 (nvoglv32.dll) in Engine.exe: 0xC0000005: Access violation reading location 0x05C34000.
我已经搜索了一段时间了,但我仍然没有找到解决方案。欢迎提供任何关于我所犯错误的信息
提前感谢,,
我最明显的错误是:
glBufferSubData(GL_ARRAY_BUFFER,NULL,vertices.size()*3*sizeof(GLfloat),&vertices)代码>
要获取向量中的数据,请传递第一个元素的地址,而不是指向向量的指针:
glBufferSubData(GL_ARRAY_BUFFER,NULL,vertices.size()*3*sizeof(GLfloat),&vertices[0])代码>
在调用glBufferSubData
的其他行中也会出现相同的错误,包括在使用normals
向量时它最终分解的行
此外,在使用&顶点[0]
之前,向量必须是非空的,或者如果使用C++11,则可以使用顶点.data()
函数而不是&顶点[0]
明显的错误是:
glBufferSubData(GL_ARRAY_BUFFER,NULL,vertices.size()*3*sizeof(GLfloat),&vertices)代码>
要获取向量中的数据,请传递第一个元素的地址,而不是指向向量的指针:
glBufferSubData(GL_ARRAY_BUFFER,NULL,vertices.size()*3*sizeof(GLfloat),&vertices[0])代码>
在调用glBufferSubData
的其他行中也会出现相同的错误,包括在使用normals
向量时它最终分解的行
此外,在使用&顶点[0]
之前,向量必须是非空的,或者如果使用C++11,则可以使用顶点.data()
函数而不是&顶点[0]
明显的错误是:
glBufferSubData(GL_ARRAY_BUFFER,NULL,vertices.size()*3*sizeof(GLfloat),&vertices)代码>
要获取向量中的数据,请传递第一个元素的地址,而不是指向向量的指针:
glBufferSubData(GL_ARRAY_BUFFER,NULL,vertices.size()*3*sizeof(GLfloat),&vertices[0])代码>
在调用glBufferSubData
的其他行中也会出现相同的错误,包括在使用normals
向量时它最终分解的行
此外,在使用&顶点[0]
之前,向量必须是非空的,或者如果使用C++11,则可以使用顶点.data()
函数而不是&顶点[0]
明显的错误是:
glBufferSubData(GL_ARRAY_BUFFER,NULL,vertices.size()*3*sizeof(GLfloat),&vertices)代码>
要获取向量中的数据,请传递第一个元素的地址,而不是指向向量的指针:
glBufferSubData(GL_ARRAY_BUFFER,NULL,vertices.size()*3*sizeof(GLfloat),&vertices[0])代码>
在调用glBufferSubData
的其他行中也会出现相同的错误,包括在使用normals
向量时它最终分解的行
此外,在使用&顶点[0]
之前,向量必须是非空的,或者如果使用C++11,您可以使用顶点.data()
函数而不是&顶点[0]
将其更改为&顶点[0]
或顶点。data()
给出的错误与此完全相同。另外,我认为指针会自动成为指向数组第一项的指针。“谢谢你的努力,”汉斯说,“归根结底,我指出的是一个问题。我希望您认识到这一点,不要将代码更改回原来的方式。不,您指向的是向量对象
,而不是向量正在寻址的数据。我让它工作了,谢谢。texCoords向量为空,我传入了一个指向向量的指针,而不是第一个元素的地址。将其更改为&顶点[0]
或顶点。data()
会产生完全相同的错误。另外,我认为指针会自动成为指向数组第一项的指针。“谢谢你的努力,”汉斯说,“归根结底,我指出的是一个问题。我希望您认识到这一点,不要将代码更改回原来的方式。不,您指向的是向量对象
,而不是向量正在寻址的数据。我让它工作了,谢谢。texCoords向量为空,我传入了一个指向向量的指针,而不是第一个元素的地址。将其更改为&顶点[0]
或顶点。data()
会产生完全相同的错误。另外,我认为指针会自动成为指向数组第一项的指针。“谢谢你的努力,”汉斯说,“归根结底,我指出的是一个问题。我希望您认识到这一点,不要将代码更改回原来的方式。不,您指向的是向量对象
,而不是向量正在寻址的数据。我让它工作了,谢谢。texCoords向量为空,我传入了一个指向向量的指针,而不是第一个元素的地址。将其更改为&顶点[0]
或顶点。data()
会产生完全相同的错误。另外,我认为指针会自动成为指向数组第一项的指针。“谢谢你的努力,”汉斯说,“归根结底,我指出的是一个问题。我希望您认识到这一点,不要将代码更改回原来的方式。不,您指向的是向量对象
,而不是向量正在寻址的数据。我让它工作了,谢谢。texCoords向量是空的,我传入了一个指向向量的指针,而不是第一个元素的地址。
Unhandled exception at 0x699CEF38 (nvoglv32.dll) in Engine.exe: 0xC0000005: Access violation reading location 0x05C34000.