是否同时分配多个对象



OpenGL具有可以同时创建多个对象的功能

glCreateBuffers(1,&handle);
...
glDeleteBuffers(1,&handle);

我想这样做的目的是为了节省同时创建/销毁所有对象的时间。但这只是在初始化时,还是会影响内存布局,例如增加局部性,从而缩短渲染时间。

在这个问题被标记为重复之前,在OpenGL中同时生成多个索引(名称)有好处吗?,这个问题是关于用ARB_direct_state_access创建对象,而不是RetoKoradi评论的名称创建,这很便宜。

VRAM不是磁盘,它是RaAccessM内存。OpenGL不需要扫描它就可以到达上面的东西。通常在某个地方存储一个内存表,它可以跟踪缓冲区和顶点阵列的位置。还有一个指针指向当前的VAO、VBO、IBO、纹理、帧缓冲区等。

当您使用其中一个glBindXYZ函数时,您会将句柄传递给OpenGL。然后,它从内存表中查找指向缓冲区/顶点数组/纹理等的指针,并将相关指针设置为结果。

gen函数是这样工作的,因为大多数人都知道他们需要多少vbo或vao,这使得创建它们变得更容易。当你有可变数量的vbos时,这只是一个问题。

在内存布局方面,一次创建多个缓冲区比一个接一个地创建缓冲区没有优势。两个

glCreateBuffers(1, &handle1);
// Stuff
glCreateBuffers(1, &handle2);
// Stuff
glCreateBuffers(1, &handle3);
// Stuff

glCreateBuffers(3, &handles);
// Stuff x 3

结果是一样的。在这两种情况下,vbo都尽可能接近(如果它们已经用完了下一个vbo应该去的内存块,那么它将离其他的有点远。

相关内容

  • 没有找到相关文章

最新更新