【问题标题】:Performance of drawing function绘图功能的表现
【发布时间】:2011-07-22 19:56:25
【问题描述】:

我正在为制作游戏创建小型引擎/框架。这是一个简单的问题,但我还没有找到答案,所以我想咨询你。

有一些classes 是从Graphic 派生的Draw(...) 函数。 Draw() 将被调用数十次甚至数百次(如果要渲染的精灵很多)。 Draw() 太大而不能内联(10-20 行)。

  1. 我希望它是virtual(有时但很少我会使用多态性*)。我认为它不应该对性能有很大影响,但你认为它应该是virtual吗?
  2. 是否应该有一些参数(2-6)来描述渲染位置(等)?我不知道传递许多参数是否会使其变慢。也许每个可绘制对象都应该有自己的位置/区域数据?

最重要的问题是2。

*例如。带动画

【问题讨论】:

  • 属于 gamedev.stackexchange.com
  • 属于use a profiler before thinking of optimization。此外,调用一个函数几百次应该完全没有影响。
  • @DeadMG:你说得对,但我的意思是实时编程。
  • @tibur:我会在最后考虑优化,但这个问题对整个项目很重要,所以我必须在一开始就知道。

标签: c++ performance function arguments real-time


【解决方案1】:

任何需要绘制的对象都会影响大量像素;绘图本身可能会比调用绘图函数花费更多时间,因此调用开销可以忽略不计。在分析显示它是一个瓶颈之前,不要担心它。

【讨论】:

  • 好的。现在我要更轻松地做出一些决定。
  • 对。考虑百分比。
【解决方案2】:

首先,您应该选择使用BitBltStretchBlt 函数的内存中双缓冲区绘图。

  • 如果基类将virtual 声明为pure-virtual,则根本不是性能问题。
  • 是的,传递多个参数会使其变慢 - 将它们放入结构中,并传递该结构的引用/指针;或使用共享区域(类中的私有变量)。
  • 是的,重绘(重绘)需要与对象相关的所有数据 - 这很明显!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多