我有一个vertex
结构,用于存储顶点在2d平面中的位置,并且可以转换其位置,还可以用于生成顶点以形成几何形状。我需要其中一个函数调用的参数,以确定我需要多少这个结构我尝试使用数组,但这不起作用,因为数组只接受const变量,我尝试向量,但当我生成顶点的缓冲区我不能使用向量作为“没有从向量到const void的转换”这里是函数。
void Sprite::init(Type mode, int verticesNum, float scale) {
//generate buffer if it hasn't been generated
if (_vboID == 0) {
glGenBuffers(1, &_vboID);
}
//make vector of structs using verticesNum as how many vertices are needed
std::vector<Vertex> vertexData(verticesNum);
if (mode == Type::CIRCLE) {
for (int i = verticesNum; i < verticesNum; i++) {
float angle = (M_PI / 180) * i;
vertexData[i].setPosition(cos(angle)*scale, sin(angle)*scale);
}
}
//Tell opengl to bind our vertex buffer object
glBindBuffer(GL_ARRAY_BUFFER, _vboID);
//Upload the data to the GPU
//this line is where i get the error as it can't use vertex data
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), /*right here*/vertexData/*to be more specific*/, GL_STATIC_DRAW);
//Unbind the buffer
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
答案 0 :(得分:2)
根据its manual page,glBufferData
()的第三个参数是const GLvoid *
。
那么,你想在这做什么?
std::vector<Vertex> vertexData(verticesNum);
// ...
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
嗯,这是你的问题。 vertextData
是std::vector
。 std::vector
无法将其自身神奇地转换为本机指针。
您可能正在尝试将指针传递给向量的第一个元素。如果是这样,那么应该是:
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), &vertexData[0], GL_STATIC_DRAW);
另外,我注意到以下几点,从我的一角开始:
for (int i = verticesNum; i < verticesNum; i++) {
这也不对。 <{1}}循环的主体永远不会执行。