在我的动态壁纸中,我正在绘制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:
如果我绘制2层而不是3层,则fps上升到45左右, 然后只绘制1层,看到fps上升到55.我想我受到填充率的限制,因为关闭和可能代价高昂的功能导致相同的fps,而且似乎唯一可以提高fps的是...
我正在考虑纹理压缩的想法,但支持不同的压缩格式似乎并不好玩。 ETC1没有我需要的alpha通道,我不确定PVRTC和ATITC是否可以在Java和OpenGL ES 1.0或1.1中使用。
我很高兴听到关于还有什么可尝试的想法。 我可以指示当前版本的壁纸和屏幕截图(如果有用)。
答案 0 :(得分:5)
你可能已经想过这个,但万一你没有:
另外,你是否尝试过使用多纹理方法进行1次传递?
编辑:另外一件事:不需要写入z缓冲区,因此要么使用没有z-buffer的上下文,要么使用glDepthMask(GL_FALSE)
禁用深度写入。
答案 1 :(得分:3)
glCompressedTexImage2D在Java(和NDK)中可用,但可用的压缩格式取决于GPU。
The AndroidManifest.xml File > supports-gl-texture
如果您使用这些压缩格式并希望支持各种Android设备,则必须为许多压缩纹理做好准备,但GPU原生压缩纹理应该可以提高渲染性能。
答案 2 :(得分:1)
android opengl框架min3d能够以60fps的速度绘制这些对象或场景。
该框架是开源的,可以在http://code.google.com/p/min3d/
下载和使用我建议您将代码与其进行比较,以便了解您的错误/不同之处,以提高效果。