将float数组传递给函数

时间:2016-06-05 22:51:24

标签: c++ arrays opengl

我正在尝试在OpenGL中加载VAO,但在运行时它不会绘制。 当我将函数中的代码直接用于我的主循环时,它运行正常,但每当我尝试通过我的函数加载VAO时它都不起作用。 在将值传递给函数时,我已经将其缩小到出错的地方,因为当我直接使用float数组时,它确实有效。 我在我的main函数中定义了一个静态float数组的值,我就像这样加载它:

GLuint RenderLoader::load(float vertices[])
{
    GLuint VertexArrayID;
    glGenVertexArrays(1, &VertexArrayID);
    glBindVertexArray(VertexArrayID);

    GLuint vertexbuffer;
    glGenBuffers(1, &vertexbuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
    return VertexArrayID;
}

1 个答案:

答案 0 :(得分:5)

问题在于sizeof(vertices)。由于数组被传递给函数,因此它变为指针,sizeof仅返回第一个元素 指针的大小。它只是在首次初始化的范围内被称为数组。

一种解决方案是将大小作为附加参数传递,但实际上唯一的解决方案是使用某种容器,例如具有vector函数的size()

使用矢量时,您将按以下方式执行此操作:

GLsizei size = vertices.size() * sizeof(vertices[0]); // Size in bytes
glBufferData(GL_ARRAY_BUFFER, size, &vertices[0], GL_STATIC_DRAW);