Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ glBufferSubData导致未处理的异常:0xC0000005_C++_Opengl 4 - Fatal编程技术网

C++ glBufferSubData导致未处理的异常:0xC0000005

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

我正在尝试使用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 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.