我正在Android上编写一个2D游戏,我的目标是支持OpenGl ES 1.1支持的手机。
我目前正在创建我的动画精灵类,它基本上是一个四元组,其上有一个改变纹理以提供动画。
我想坚持使用Opengl 1.1,因此我避免使用着色器,并且想知道其他人是如何接近动画精灵的实现的。
我的想法最初是:
如果没有着色器,是否有更聪明或更有效的方法来执行此操作?
由于
答案 0 :(得分:2)
如果您只有两个选项,请选择#2。
但是,我建议为每个精灵帧制作和缓存四个顶点集的所有到最靠近GPU的内存上的顶点缓冲区。或者只生成新的精灵四边形顶点并为每个绘图指定它们。这是通过缓存在性能与内存之间的权衡问题。考虑单帧的内存消耗顶点。
更改GPU内部状态是一项非常昂贵的操作。当然,包括纹理对象交换。尽可能避免这种情况。 这就是传统游戏开发中使用巨大纹理图集的原因。
将资源(包括顶点)传输到VRAM(最接近GPU的内存)可能很昂贵,因为它们需要通过较慢的总线进行复制。这与服务器 - 客户端情况类似。 GPU + VRAM是服务器,CPU + RAM是通过PCI总线网络连接的客户端。但是,这可能因系统结构和内存/总线模型而异。