gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:43:15 26 4
gpt4 key购买 nike

我正在尝试使用 vao 和 vbo 制作网格类。

首先我创建 vector 来保存要缓冲的数据:

std::vector<GLfloat> vertices;
std::vector<GLfloat> normals;
std::vector<GLfloat> texCoords;
std::vector<GLushort> indices;

我从文件中存储数据,然后创建缓冲区:

// Vertex array
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);

// Vertex buffer
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);

// Index buffer
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);

我尝试像这样填充缓冲区:

// 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);

要获取 vector 中的数据,请传递第一个元素的地址,而不是指向 vector 的指针:

glBufferSubData(GL_ARRAY_BUFFER, NULL, vertices.size()*3*sizeof(GLfloat), &vertices[0]);

您在调用 glBufferSubData 的其他行中犯了同样的错误,包括它最终在您使用 normals vector 的地方崩溃的行。

此外,在使用 &vertices[0] 之前 vector 必须是非空的,或者如果使用 C++11,您可以使用 vertices.data() 函数而不是 &vertices[0]

关于c++ - glBufferSubData 导致未处理的异常 : 0xC0000005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com