绘图功能表现

发布于 2024-11-25 17:26:17 字数 411 浏览 0 评论 0原文

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

有一些使用 Draw(...) 函数从 Graphic 派生的Draw() 将被调用数十次甚至数百次(如果有许多精灵要渲染)。 Draw() 太大,无法内联(10-20 行)。

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

最重要的问题是 2.

*ex。带动画

I'm creating small engine/framework for making games. It's kind of simple question but I haven't found an answer so I'd like to consult you.

There are some classes derived from Graphic with the Draw(...) function. Draw() will be called dozens or maybe even hundreds of times (if there are many sprites to render). Draw() is too big to be inline (10-20 lines).

  1. I'd like it to be virtual (sometimes but rather rarely I'll be using polymorphism*). I think it shouldn't affect greatly on performance but do you think it should be virtual?
  2. Should it have some arguments (2-6) describing position to render (etc)? I don't have an idea if passing many arguments will make it slower. Maybe every drawable object should have its own position/area data?

The most important question is 2.

*ex. with animations

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

榆西 2024-12-02 17:26:17

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

Any object which needs to be drawn will be affecting a large number of pixels; it is likely that drawing itself will take much more time than calling the drawing function, so the calling overhead will be negligible. Don't worry about it until profiling shows it to be a bottleneck.

苏璃陌 2024-12-02 17:26:17

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

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

First you should choose in-memory, double-buffer drawing using BitBlt, StretchBlt functions.

  • If the base class declares virtual as pure-virtual, isn't a performance problem at all.
  • Yes, passing multiple arguments can make it slow - put them into structure, and pass reference/pointer of that structure; or use a shared area (private variables in class).
  • Yes, for redrawing (re-painting) would need all data related to object - that's obvious!
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文