0

我正在使用 SDL2 用 C 语言开发游戏,我的问题是游戏是全高清的,并且有很长的(180 帧)角色动画会生成非常大的精灵表。我有一个 7326x7250 像素的精灵表,我必须将其分解为 16 个 2048x2048 像素的精灵表,这样我才能在平板电脑上播放它(它们的最大纹理大小是,在下限上,2048x2048)。

考虑到这个问题,我最终想知道是否将动画存储在视频文件中并将每个解码帧加载到 GPU 中会更好。我知道解码视频帧的开销以及在 GPU 上切换纹理的开销(通过 16 个 2048x2048 纹理,我能够将它们存储在单个纹理数组中,在动画期间保持 GPU 状态)。有没有人试过这个并成功了?

4

2 回答 2

1

以这种方式使用视频文件会牺牲简单性、性能、图像质量和令人惊讶的内存(您需要流式传输视频的一部分,将其转换为位图,然后将该位图上传到显卡)。

几乎唯一的好处是文件大小更小,我认为这不值得任何惩罚,更不用说所有这些惩罚了。你仍然有相同的纹理限制,(也许 SDL2 api 在使用视频时隐藏了这个实现细节,但它仍然是一个限制)

我不会过多担心切换纹理,因为作为动画,您可能每帧只能切换一次纹理(并且考虑到无论如何您都会在帧中切换纹理以绘制其他对象,这不会影响性能完全没有)也就是说,除非您有多个角色在不同的动画状态下使用相同的精灵表,但即便如此,根据纹理将它们组合在一起以减少切换会更容易。

于 2015-10-12T19:27:14.827 回答
0

我不相信这是一个“真实”的问题,所以我不会给出“真实”的答案。我会使用 SVG,文件会非常小,您只需将它们绘制到 SDL 表面或纹理,无论您需要它们的大小。SDL 本身不支持 SVG,因此请查看 Cairo 等库。

为了您的方便,我向您推荐这篇关于使用 libSDL 渲染 SVG 图形的论文,该论文由 Tux Paint 的开发人员编写。它应该可以帮助您理解总体思路。

于 2015-10-11T17:39:50.227 回答