【问题标题】:Relative performance of native C++ to Flash for pixel-pushing本机 C++ 与 Flash 的像素推送相对性能
【发布时间】:2010-10-20 07:06:30
【问题描述】:

我试图大致了解 Flash 在纯像素推送 2D 图形上比在 SDL 或其他本机库中执行相同操作要慢多少。例如,如果我在现代 PC 上有一个 Flash/Flex 应用程序,每帧执行一个 2D 循环并直接读取/设置每个像素,那么对于本机 C++ 应用程序,什么等效的 PC 可以提供相同的性能?也许是经典的奔腾、PII、PIII?我知道这可能不是线性关系,但一定有可能得到某种想法。

【问题讨论】:

  • “本机 C++ 应用程序”和“其他本机库”可能意味着很多事情 :) SDL 是一个很好的例子。它还取决于您要做什么 - 精灵、blts 或直接帧缓冲区逐像素编辑?顺便说一句,也许有趣(也许不):newgrounds.com/portal/view/465908
  • 选择一些一般情况或比较每个具体情况。我的意思是 C++ 就像使用 SDL 或 Direct2D 的 2D 游戏,而不是使用笨重的 GDI,它有自己的开销
  • 有趣的链接,但我真的不知道它在做什么,要知道分数是否令人印象深刻:)

标签: flash performance rendering 2d


【解决方案1】:

最近的 Flash 版本直接与视频驱动程序对话,因此差异比您想象的要小得多。

【讨论】:

  • 我没说我想多少,你怎么知道它少了很多? :) 此外,直接视频驱动程序通信并不能消除 AS3 本身就很慢的问题,因为它仍然是 IIRC 解释而不是使用 JIT(这是真的吗?)
  • 谢谢。来自他们的网站“Tamarin 虚拟机在 Adob​​e® Flash® Player 中使用,并且也被 Adob​​e 以外的项目采用。”这是否意味着它是标准 Flash 的一部分,还是仅限 Firefox?无论如何,您能否澄清“比您想象的要少”
  • 在 Flash 中仍在使用; Firefox 实际上仍在使用 SpiderMonkey。速度差异比 10× 接近 10%。
  • 谁能提供这方面的任何链接/参考资料?
【解决方案2】:

在每一帧上使用 getPixel()/setPixel() 进行通用 2d 重写会非常非常慢。您基本上无法推送像素并期望实时性能。

但是,这始终取决于您要执行的操作。许多最常见的动画技术可以通过使用本机(播放器加速)功能来完成,并且在 Flash 中速度更快。例如,如果你想要一个矩形在屏幕上移动,你不会将它推到 BitmapData 实例上,你可以让一个原生盒子移动;如果要转换视频以使其模糊,可以使用本机 BlurFilter 过滤器;如果要更改图像的整体颜色,可以使用颜色矩阵;如果你想对某物应用一些 3d 变换,你可以使用原生 3d 变换器;以此类推。

对于严重的较低级别的像素推送,您还可以使用 Pixel Bender,这是 Flash 的像素着色器语言。它可以进行更快的像素推送(C 级速度),但它是有限的。如果您想构建自己的过滤器/着色器或混合模式,它非常有用,但它不适用于 SDL 级别的东西。人们已经创建了低分辨率光线投射演示等概念验证演示,但这是您可以做的最重要的事情。

如果你想要真正的 C 性能并且你正在考虑 SDL 或类似的东西,你可能最好用 C 实际做你的东西并使用 Alchemy 编译。例如,a port of SDL to Flash,甚至是 id Software 的DOOM/Hexen/Heretic 的完整端口 - 全部使用本机代码,对 UI 进行了一些调整。

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2018-05-03
    • 2019-04-25
    • 2019-10-14
    相关资源
    最近更新 更多