使用 glBufferData 后可以删除浮点数组吗?

Sey*_*o97 5 opengl buffer object vertices

我正在研究 OpenGL API,我想问你是否可以在将它传递给 OpenGL 后删除一个浮点数组顶点。

示例代码:

GLuint VBO;
float *vertices = new float[2];
vertices[0] = 0.0f;
vertices[1] = 1.0f;

glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

delete[] vertices;
Run Code Online (Sandbox Code Playgroud)

你能告诉我这样做的后果吗?

OFE*_*OFE 2

根据https://www.opengl.org/sdk/docs/man/html/glBufferData.xhtml,该函数创建“一个新的数据存储”并且“数据存储用来自该指针的数据进行初始化”。
这意味着数据被复制到一个新位置,并且删除这个原始数据是安全的(调用 glBufferData 后对原始数据所做的任何操作都不会影响这个 gl 缓冲区)。

\n您可能会注意到,它还指出“新数据存储未映射”,这意味着您还没有“直接”访问新缓冲区的权限。如果您稍后选择映射缓冲区(例如使用 glMapBuffer\xe2\x80\x8b、glMapBufferRange 或类似的\xe2\x80\x8b),您将获得一个新指针,允许您“直接”处理数据,您必须小心那些映射的缓冲区。

\n