比 SDL_gfx ZoomSurface 更快的缩放 SDL 视图的方法?

发布于 2024-12-05 02:27:34 字数 204 浏览 1 评论 0原文

我正在使用 SDL 编写游戏。我已经通过 SDL_gfx 库的 ZoomSurface 函数实现了可缩放窗口大小,但是帧速率确实受到了影响(大概是因为每次调用 ZoomSurface 时,它​​都会创建一个全新的 SDL_Surface 实例,并且为了连续缩放,您需要调用每一帧)。

我对 SDL 编程还很陌生,所以我不知道它可能具有任何其他功能。有没有更快的方法来做到这一点?

I'm programming a game with SDL. I've implemented scalable window size via the SDL_gfx library's zoomSurface function, but boy does the framerate take a hit (presumably because every time you call zoomSurface, it creates an entirely new SDL_Surface instance, and in order to be continuously zoomed you need to call it every frame).

I'm pretty new to programming with SDL so I'm not aware of any other functions it might have. Is there a faster way to go about doing this?

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

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

发布评论

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

评论(1

岁月如刀 2024-12-12 02:27:34

SDL 并不真正支持这一点。

最“正确”的方法是使用底层图形 API(OpenGL 或 DirectX)来进行缩放。例如,如果您在后台使用 OpenGL,则调用 glScale{f,d}。不过,我相信 Windows 上的 SDL 已编译为使用 DirectX,因此这不是一个可移植的解决方案。

另一种方法是当您需要按某个系数缩放所有内容时重新创建所有曲面。这很慢,但不需要每一帧都完成;当缩放因子发生变化时,只需要执行一次,然后缩放后的表面就可以保存在内存中并在每一帧中重复使用。

请记住,对于 2D 游戏来说,允许按比例调整大小通常没有意义,因为除非使用某些滤镜,否则精灵在拉伸时往往看起来很糟糕。

SDL doesn't really support this.

The most 'correct' way is to use the underlying graphics API (OpenGL or DirectX) to do the scaling. For example, calling glScale{f,d} if you're using OpenGL under the hood. I believe SDL on Windows is compiled to use DirectX, however, so this isn't a portable solution.

An alternative is to re-create all surfaces when you need to zoom everything by some factor. This is slow, but it doesn't need to be done every frame; it only needs to be done once when the scaling factor changes, and then the scaled surface can be kept in memory and re-used for each frame.

Keep in mind that it usually doesn't make sense for 2D games to allow scaled resizing, because sprites tend to look horrible when stretched unless some filter is used.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文