【发布时间】:2011-07-07 03:11:45
【问题描述】:
在我的动态壁纸中,我绘制了 3 个覆盖整个屏幕的纹理四边形。在 Nexus One 上,我得到 40fps。我正在寻找提高性能的方法。
四边形相互叠加,纹理从 RGB_8888 位图加载。纹理为 1024x1024。
我有
glDisable(GL_DITHER);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glDisable(GL10.GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
我尝试过的所有方法都产生相同的 40fps:
- 将纹理大小减小到 512x512 和 256x256
- 使用 draw_texture 扩展
- 禁用混合
- 将纹理过滤从 GL_LINEAR 更改为 GL_NEAREST
- 使用 VBO(拼命尝试,因为只有 3 个四边形...)
- 在独立活动中运行绘图代码(以防作为动态壁纸以某种方式影响性能)
如果我画 2 层而不是 3 层,fps 会上升到 45 左右, 然后仅绘制 1 层会看到 fps 上升到 55。我想我受到填充率的限制,因为关闭和打开可能成本高昂的功能会导致相同的 fps,而似乎提高 fps 的唯一方法就是减少绘制...
我正在考虑纹理压缩的想法,但支持不同的压缩格式似乎并不有趣。 ETC1 没有我需要的 alpha 通道,我不确定 PVRTC 和 ATITC 是否可以在 Java 和 OpenGL ES 1.0 或 1.1 中使用。
我很高兴听到有关其他尝试的想法。 如果有用,我可以指点当前版本的壁纸和屏幕截图。
【问题讨论】:
标签: android performance opengl-es textures