1
1
我不能告诉你缓冲区对象将被分配到什么内存中。实际上,你基本上是自己回答这个问题的,所以你可以希望一个好的司机会这样做。 glMapBuffer的实现方式与内存映射文件相同。记住物理内存和虚拟地址空间之间的区别:当您写入内存位置时,地址通过页表映射到物理位置。如果所需的页面被标记为已调出,则会发生中断,系统会将所需页面从调出加载到RAM。此机制可用于将文件和其他资源(如GPU内存)映射到进程的虚拟地址空间。当您调用glMapBuffer时,系统会分配一些地址范围(不是内存,只是地址),并准备页表中的相关条目。当您尝试读/写这些地址时,系统会将其加载/发送到GPU。当然这将是缓慢的,所以一些缓冲是在途中完成的。 如果你经常在CPU和GPU之间传输数据,我怀疑PBOs会更快。在GPU上进行许多操作(例如从帧缓冲区加载,用CPU更改一些texel,并在GPU上再次将其用作纹理)时,它们会更快。在集成图形处理器或AGP内存的情况下,它们可以更快,因为在这种情况下glMapBuffer可以将地址直接映射到物理内存,有效地消除了一次拷贝操作。 FBO更好吗?为什么?当您需要渲染到纹理时,它们会更好。这又是因为它们消除了一个数据拷贝操作。 |
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |