使用libgdx绘制大背景图像 - 最佳实践?

5
我正在尝试编写一个libgdx livewallpaper(OpenGL ES 2.0),它将显示一张独特的背景图像(不可分割成精灵)。
我想要定位到平板电脑,因此我需要能够以至少1280x800的分辨率显示背景图像,同时还需要更多的活动,所以我需要尽可能快地渲染它。
现在我只有关于libgdx和opengl es的基础知识,所以我不知道最好的方法是什么。
通过谷歌搜索,我找到了一些选项:
  • 将纹理拆分为较小的纹理。在大多数设备上,GL_MAX_TEXTURE_SIZE至少为1024x1024,但我不想达到最大值,所以也许我可以使用512x512,但这是否意味着需要绘制很多瓷砖,在每一帧重新绑定许多纹理=> 性能低下?
  • libgdx有GraphicsTileMaps,它似乎是自动绘制瓷砖的工具。但它还支持许多我不需要的功能(将信息映射到瓷砖),也许最好手动拆分?

再次强调,对我来说主要是性能——因为绘制背景被认为是最基本的事情,更多的动画将在其上面!

随着平板屏幕的增大,我预计很快就需要能够舒适地渲染更大的图像尺寸:)

任何建议都将不胜感激!:)


1
我认为最好在运行时找到最大纹理尺寸,然后根据需要对图像进行分区。此外,如果您的屏幕密度较低,您可以先进行缩放... - Display Name
1个回答

3
许多平板电脑(和某些手机)支持2048纹理。将其一次性绘制会是最快的选项。如果您仍然需要100%确保,可以在GL_MAX_TEXTURE较小时(640x400),将背景分成2部分。
“未来”平板电脑肯定会支持更大的纹理,所以不要太担心它。
对于实际绘图,只需创建一个使用VBO的libgdx网格,尽可能优化性能! ;)
两件您没有提到的事情对性能非常重要。纹理过滤器(如果您不进行像素完美映射,则GL_NEAREST是最丑陋但最快的),以及纹理格式(RGBA_8888将是最好但最慢的,您可以将其降级直到符合您的需求 - 至少您可以删除α,对吧?)。
您还可以研究压缩格式,这将大大减少填充速率!
我建议您开始编写代码,然后调整性能。您所遇到的这个问题稍后优化起来并不难。

谢谢!你说得对,我应该动手实践一下 :) 我已经开始了,但不是用Mesh,而是用SpriteBatch来渲染它。我猜它默认不使用VBO。另外,我肯定需要GL_LINEAR,因为这个图像需要高质量。但不需要透明度,是的。还有,我也考虑使用ETC1 :) - dimsuz
1
@dimsuz 最高的质量是在绘制时不需要缩放。OpenGL 的缩放效果很差。因此,如果可能的话,请坚持使用 GL_NEAREST,并确保图像始终以 1:1 的比例显示。 - Display Name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接