【问题标题】:Can I delete OpenGL vertex arrays after calling glDrawArrays?我可以在调用 glDrawArrays 后删除 OpenGL 顶点数组吗?
【发布时间】:2011-01-13 20:18:48
【问题描述】:

我在每次渲染时动态生成顶点数组,然后我想删除这些数组。 glDrawArrays 是否立即将顶点数组复制到服务器?因此在调用glDrawArrays 后删除顶点数组是否安全?

float * vp = GetVertices(); // Regenerated on each render
glVertexPointer(3, GL_FLOAT, 3 * sizeof(float), vp);
glDrawArrays(GL_TRIANGLES, 0, nVertices);
delete[] vp; // Can I do this?

否则,如何确定何时可以安全地删除顶点数组?

【问题讨论】:

  • 删除数组需要语法:delete [] vp; 其中vp 是指向数组第一个元素的指针。
  • 在一个不相关的注释上 - 使用顶点数组需要每次将数据分流到显卡内存。如需更有效的方法,请查看 Vertex Buffer Objects songho.ca/opengl/gl_vbo.html

标签: c++ opengl lifetime vertex-array


【解决方案1】:

是的,它会立即被复制,所以一旦你完成了调用,你就可以对数组做任何你喜欢的事情。

另外,正如直接指出的那样,您需要使用delete[] vp 来删除数组。

【讨论】:

    【解决方案2】:

    可以,调用 glDrawArrays 后可以删除顶点数组。但是opengl不会将顶点数据存储在它的内存中。它只会使用顶点数组并在帧缓冲区上绘制。所以下次如果要绘制相同的顶点,则必须再次将顶点数组提供给glDrawArrays。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多