fre*_*ish 2 c++ opengl vbo vertex-buffer
假设我有一个顶点数组和一个VBO指针:
std::vector<Vertex> vertices;
GLuint vbo;
glBindBuffer(GL_ARRAY_BUFFER, vbo);
Run Code Online (Sandbox Code Playgroud)
现在我缓冲数据:
glBufferData(
GL_ARRAY_BUFFER,
vertices.size()*sizeof(Vertex),
&vertices[0],
GL_STATIC_DRAW
);
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,我仍然需要保持顶点数组GL_STATIC_DRAW
.但是,如果我将其更改为GL_STATIC_COPY
然后所有数据都将被复制到GPU的内存中,这样我就可以释放所使用的内存vertices
.那是对的吗?如果是这样的话我们为什么需要*_DRAW
?由于GPU的内存限制,这有用吗?加上GL_STATIC_READ
真的有用吗?
所有这些都在glBufferData()
手册页中进行了解释.
https://www.opengl.org/sdk/docs/man/html/glBufferData.xhtml
您不需要在程序的内存中保留额外的副本.完整的目的glBufferData()
是将数据从程序复制到OpenGL缓冲区,复制完成后,您可以使用程序存储器执行任何操作.
如果数据不是NULL,则使用来自此指针的数据初始化数据存储.
不要使用GL_STATIC_COPY
,这是不正确的.文件内容如下:
COPY
通过从GL读取数据来修改数据存储内容,并将其用作GL绘图和图像规范命令的源.
因此GL_STATIC_COPY
,仅适用于不同OpenGL缓冲区之间的内部副本,而不适用于从应用程序到OpenGL的副本.使用DRAW
.