我想知道是否有人可以建议在Android Java和OpenGL ES应用程序中加载纹理的良好模式。
我首先要考虑的是确定要分配多少个纹理名称,以及在渲染顶点之前如何有效地进行此操作。
我的第二个担心是加载纹理,我必须根据我的游戏数据推断要加载的纹理。这意味着我将玩弄字符串,我知道这是我确实不应该在GL线程中执行的操作。
总的来说,我了解加载纹理时会发生什么,我只是想从中获得最佳生命周期。还有其他我应该考虑的事情吗?
1)您应该分配所需数量的纹理名称。每个使用的纹理一个。
加载纹理是一项非常繁重的操作,它会拖延渲染管线。因此,永远不要在游戏循环中加载纹理。您应该在呈现纹理的应用程序状态之前具有加载状态。加载状态负责加载渲染中所需的所有纹理。因此,当您需要渲染几何图形时,将加载所有纹理,而您不必再为此担心。
请注意,在不再需要纹理之后,必须使用glDeleteTextures删除它们。
2)如果您推断要为不同的关卡或类似内容需要不同的纹理,则应在加载状态下处理关卡数据并确定需要加载的纹理。
另一方面,如果您需要绘制文本(例如当前分数),则OpenGL中的情况会变得更加复杂。您将具有以下选项:将所需的文本预渲染到纹理(简单),实现自己的位图字体引擎(更困难)或使用“位图和画布”对即时生成纹理(慢速)。
如果您在游戏期间要显示的消息集有限,那么我很可能会将其预渲染为纹理,因为实现起来很简单。
对于当前分数,只要具有一个纹理即可,该纹理具有一个从0到9的数字的字形,并使用该字形呈现任意值。实现将非常简单。
如果需要更长的本地化文本,则需要开始考虑即时生成纹理。基本上,您将创建一个位图,使用“画布”在其中渲染文本。然后,您可以将其作为纹理上传并渲染为其他任何纹理。在您不再需要它之后,您将其删除。此选项很慢,应在应用程序循环内避免。
3)关于纹理并要充分利用GPU,您至少应该牢记以下几点(这些事情会变得更高级,并且只有在启动应用程序并运行之后,您才需要理会它们)如果您需要优化帧速率):
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句