gpt4 book ai didi

opengl - glBufferData 实际上是根据现场大小分配内存吗?

转载 作者:行者123 更新时间:2023-12-04 08:24:03 26 4
gpt4 key购买 nike

我想知道,如果我使用 glBufferData,它会在我调用它时准确地分配内存吗(也就是说,如果 size 参数大于此时的可用内存,它会崩溃)还是会它有某种特殊的即时规则,仅当我实际将数据复制到缓冲区时才分配内存?

为了更简洁,我的问题将通过回答一个更实际的问题来回答:

这需要多少 GPU 内存:

glBufferData(GL_ARRAY_BUFFER, 1000, NULL, GL_DYNAMIC_DRAW);

然后,当您在同一个缓冲区上执行此操作时,占用的内存将如何变化:

glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(poly), &poly);  

最佳答案

How much memory on the GPU will this take:

glBufferData(GL_ARRAY_BUFFER, 1000, NULL, GL_DYNAMIC_DRAW);

不能保证这会在“GPU”上分配任何内存。驱动程序很可能会决定将缓冲区对象放在 CPU 内存中而不是 GPU 中。

我假设您的问题是“将为缓冲区对象分配多少内存?”

1000 字节。这就是你要求的,这就是驱动程序将分配的。

And then, how will the occupied memory change when you do this on the same buffer:

glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(poly), &poly);  

如果当前绑定(bind)到 GL_ARRAY_BUFFER 的缓冲区对象已经为其分配了存储空间,并且该存储空间至少包含 sizeof(poly) 字节,那么它将修改缓冲区的通过将第一个 sizeof(poly) 字节从 &poly 复制到存储中来存储。

如果它没有分配存储空间,或者如果存储空间小于 sizeof(poly) 字节,您将收到一个 GL_INVALID_VALUE 错误。

分配 的大小没有改变。正如当您在返回的指针上调用 memcpy 时,malloc 返回的分配大小不会改变。 glBufferData 类似于malloc;它分配存储空间(可以选择 memcpy 到该存储空间)。 glBufferSubData 类似于memcpy;它将数据复制到现有存储中。

正如不先分配就不能memcpy一样,不先调用glBufferData就不能调用glBufferSubData

关于opengl - glBufferData 实际上是根据现场大小分配内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14903029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com