Xna 是否应跨帧保留顶点

Xna 是否应跨帧保留顶点,xna,monogame,Xna,Monogame,我读过一篇文章,它指导你编写你自己的SpriteBatch,我注意到所有的顶点和索引在每一帧都会被破坏和重新创建。那不是浪费吗?如果所有数据都永久存储在SpriteBatch中,并添加一种操作它们的方法,不是更好吗?谁能告诉我那样做的坏处吗 感谢您的意见如果您的游戏在每一帧上都呈现相同的三角形(或类似三角形),并且只需要调整坐标,那么定制您自己的SpriteBatch来识别这一点可能是值得的。如果你有时显示/隐藏东西,它可能会变得混乱和复杂。找出可能的好处的唯一方法是分析代码并找出有意义的瓶颈所

我读过一篇文章,它指导你编写你自己的SpriteBatch,我注意到所有的顶点和索引在每一帧都会被破坏和重新创建。那不是浪费吗?如果所有数据都永久存储在SpriteBatch中,并添加一种操作它们的方法,不是更好吗?谁能告诉我那样做的坏处吗


感谢您的意见

如果您的游戏在每一帧上都呈现相同的三角形(或类似三角形),并且只需要调整坐标,那么定制您自己的SpriteBatch来识别这一点可能是值得的。如果你有时显示/隐藏东西,它可能会变得混乱和复杂。找出可能的好处的唯一方法是分析代码并找出有意义的瓶颈所在

由于SpriteBatch处理结构和预分配的列表和数组,因此内存分配不应该有任何浪费,因此问题在于您是否可以避免重新分配所有这些值,以及(如果这适用于您)避免执行z顺序排序

我自己使用一个定制的SpriteBatch,根据分析,我可以看到z顺序排序步骤是SpriteBatch绘图调用堆栈中的主要瓶颈。然而,我的帧速率在我最懦弱的目标平台上已经足够好了。所以至少在这一点上,我没有理由尝试进一步的优化。此外,我的应用程序更需要优化我的物理特性,并通过正交更新特性分离我的绘图,以避免不必要的更新工作

您的结果可能会有所不同。祝你好运