我有一个OpenGL动态壁纸,除了那些配备PowerVR SGX系列的手机外,所有手机都能正常使用。这包括几乎所有三星手机和摩托罗拉Droid系列。壁纸只不过是PowerVR GPU手机上的黑屏。我一直绞尽脑汁想要解决这个问题一周,但没有运气。
不同GPU之间的一个区别是纹理压缩。我在这方面所做的一些事情是我将纹理图像更改为256x256的正方形。将其从8位更改为16位rgba,甚至尝试编入索引。
我列出了PowerVR提供的所有扩展以及Adreno可用的扩展。似乎可用扩展中存在相当多的差异,但我不知道哪些功能与哪些扩展(尽管我可以猜测)。以下是我使用的函数列表:
我正在使用Robert Green的GlWallPaperService并在Trying to draw textured triangles on device fails, but the emulator works. Why?尝试了此解决方案。有没有人知道为什么PowerVR芯片给了我这么难的时间以及我能做些什么呢?
答案 0 :(得分:2)
删除EGL10.EGL_RED_SIZE,EGL10.EGL_GREEN_SIZE和EGL10.EGL_BLUE_SIZE,但在eglChooseConfig中保留EGL10.EGL_DEPTH_SIZE,EGL10.EGL_NONE。我假设PowerVR芯片以一种使定义问题的方式处理RGB。
答案 1 :(得分:2)
这可能对你没有帮助,但我注意到了:
不同GPU之间的一个区别是纹理压缩。我在这方面所做的一些事情是我将纹理图像更改为256x256的正方形。将其从8位更改为16位rgba,甚至尝试编入索引。
据我所知,目前没有硬件支持索引纹理。此外,要使用纹理压缩,您需要定位设备特别支持的压缩纹理格式(通常需要在主机/开发平台上运行压缩器)。 SGX支持PVRTC和ETC,但这些是否启用取决于平台
答案 2 :(得分:0)
根据我自己使用此GPU的经验,它将提供GLES配置,一旦应用将无效(即不会创建GLES上下文)。解决方法是查看GLSurfaceView代码,推出自己的代码并尝试每个提供的配置,无论它是否适用于创建上下文。