首先,我正在编写一个游戏。目前在渲染函数中有两个对两个不同函数的调用。一个呈现一些文本,一个呈现精灵。
在我的电脑(AMD Phenom(tm) II X4 955处理器(4个CPU),大约3.2 GTX,4096MB RAM DDR2,NVIDIA GeForce GTX285)上,当渲染大约200个精灵时,我的渲染速度大约为2200FPS,当渲染大约14,500个精灵时,渲染速度大约为100FPS。
我使用一个矢量来存储我正在渲染的每个对象的信息,并使用一个sprite和许多绘制调用。
针对C++进行了全面优化的VS2008发布模式。我知道我听说left和right不会过早优化,但在这一点上,它对我来说运行得很好,但在某些计算机上运行得不是很好。
我无法想象将向量转换为数组,因为我每一帧都在以一种无法确定的方法从向量中推送和拉出东西。几乎是随机的。
我试过浮球和双人,速度也没什么不同。
与使用DirectX和Sprite Render方法相比,使用DirectDraw会有所不同吗?因为我不知道DirectDraw和DirectX之间的区别,所以我不是100%应该思考这一点。
这个游戏在普通电脑上运行得很好,但我将我的游戏与Touhou进行比较。Touhou在我试过的最弱的计算机上以60FPS运行,但我的游戏运行速度不会超过36~42FPS。我无法想象我做错了什么,因为我是DirectX和C++的新手。
在这件事上的任何帮助都将是伟大的,不幸的是,我将在一段时间内不能添加信息或回答问题。
发布于 2010-02-18 03:53:47
你需要一个侧写员。
在响应中有一些很好的性能建议,但这并不重要。试图在没有分析器的情况下优化程序就像试图在没有编译器的情况下编写程序一样。不要猜测,测量。
尽管如此,分析图形代码是一个臭名昭著的麻烦,而且(据我所知)没有任何好的、免费的工具来帮助它。所以现在先别管这件事:从一个普通的CPU分析器开始,找出你的哪些调用真正占用了你所有的时间。
发布于 2010-02-18 01:31:56
我使用一个矢量来存储我正在渲染的每个对象的信息,并使用一个sprite和许多绘制调用。
我不确定我明白你在说什么,但这听起来像是你在许多不同的地方绘制了本质上相同的对象。如果是这样的话,您可能需要查找DirectX Instancing。基本思想是指定1)要绘制的几何图形,以及2)绘制它的多个位置。这样可以避免在每次绘制对象时重新指定几何体,因此可以显著提高速度。
发布于 2010-02-18 01:45:53
我无法想象将向量转换为数组,因为我每一帧都在以一种无法确定的方法从向量中推送和拉取东西。,
。几乎是随机的。
您是否从除向量后面以外的位置插入和/或删除对象?在向量中,从中间插入和删除需要O(n)时间,也就是说,所需的时间与向量的大小成正比。
如果是这样的话,请考虑使用std::list
。请注意,对于10k+对象,这很容易导致性能问题,具体取决于您执行此操作的频率。
https://stackoverflow.com/questions/2282735
复制相似问题