因此,基本上,每当我创建缓冲区对象时,Opengl就会在GPU上分配一些内存。
考虑场景1,其中我为两个统一变量生成了2个统一缓冲区。
现在考虑场景2,其中我创建了一个缓冲区,并将2个统一变量封装在一个接口块中。
我的理解是,对于场景1,两个独立的内存区域得到分配,而对于场景2,则分配一个大的连续内存块。如果是这样的话,那么场景1可能容易受到内存碎片的影响,如果发生这种情况,它是由OpenGL管理的,还是应该在编写性能关键代码之前记住这一点?
发布于 2018-02-13 17:14:51
实际上我得帮你解决这个问题。它是
所以,基本上,每当我创建缓冲区对象,Opengl就会分配一些内存。
你不知道--而且假设是无效的--关于这个记忆所在的位置。你只要得到保证,它就在那里(某处),你可以利用它。
由OpenGL或其他什么管理
是。事实上,合理的OpenGL实现确实必须定期地移动数据。想想看:在现代计算机系统中,有几个应用程序确实并行地使用GPU,而进程(通常)都不关心或尊重在同一台机器上驻留的其他进程的内部工作。然而,用户(自然)期望,所有流程都将“正常工作”,而不依赖于这种情况。
GPU驱动程序在后台进行大量数据推送,在系统内存、GPU内存之间移动数据,甚至在存储设备上交换空间,而进程却没有注意到这一点。
或者在编写性能关键代码之前,我们应该记住这一点吗?
普通程序员只需简单地使用OpenGL API就可以获得最好的性能,而不会试图超越实现。每个OpenGL实现(= GPU模型+驱动程序版本的组合)都有“快速路径”,但是无法访问到关于GPU和驱动程序细节的详细信息,这些信息很难实现。
通常只有GPU制造商自己才有这方面的知识;如果你是一个AAA游戏工作室,你通常会有几个GPU供应商在快速拨号上来拜访你的办公室,做他们的巫毒术;大多数访问这个网站的人可能不知道。
https://stackoverflow.com/questions/48771540
复制相似问题