2

我有一个 OpenGL 动态壁纸,可以在除 PowerVR SGX 系列之外的所有手机上正常工作。这包括几乎所有三星手机和摩托罗拉 Droid 系列。壁纸不过是 PowerVR GPU 手机上的黑屏。我已经绞尽脑汁想解决这个问题一个星期了,但没有运气。

不同 GPU 之间的一个区别是它们的纹理压缩。我在这方面所做的一些事情是将纹理图像更改为 256x256 的正方形。将其从 8 位更改为 16 位 rgba,甚至尝试索引。

我列出了 PowerVR 可用的所有扩展以及 Adreno 可用的扩展。可用扩展似乎有很多差异,但我不知道哪些功能与哪些扩展一起使用(尽管我可以猜测)。以下是我使用的函数列表:

  • glLightfv
  • glMaterilfv
  • glDepthFunc
  • glEnableClientState
  • glViewport
  • glMatrixMode
  • glLoadIdentity
  • 胶透视
  • glclearcolor
  • 清晰的
  • glTranslatef
  • glRotatef
  • gl顶点指针
  • glTexCoordPointer
  • glColor4f
  • glNormal3f
  • glDrawArrays
  • glTex 参数

我正在使用 Robert Green 的 GlWallPaperService 并在尝试在设备上绘制带纹理的三角形失败时尝试了此解决方案,但模拟器可以工作。为什么?. 有谁知道为什么 PowerVR 芯片让我如此艰难,我能做些什么?

4

3 回答 3

2

删除 EGL10.EGL_RED_SIZE、EGL10.EGL_GREEN_SIZE 和 EGL10.EGL_BLUE_SIZE 但在 eglChooseConfig 中保留 EGL10.EGL_DEPTH_SIZE、EGL10.EGL_NONE 有效。我假设 PowerVR 芯片处理 RGB 的方式使得定义它们成为一个问题。

于 2011-09-26T20:30:59.630 回答
2

这可能对你没有帮助,但我注意到:

不同 GPU 之间的一个区别是它们的纹理压缩。我在这方面所做的一些事情是将纹理图像更改为 256x256 的正方形。将其从 8 位更改为 16 位 rgba,甚至尝试索引。

据我所知,目前没有任何硬件支持索引纹理。此外,要使用纹理压缩,您需要以设备特别支持的压缩纹理格式为目标(这通常需要在主机/开发平台上运行压缩器)。SGX 支持 PVRTC 和 ETC,但是否启用取决于平台

于 2011-10-17T08:19:40.403 回答
0

根据我自己使用此 GPU 的经验,它将提供 GLES 配置,一旦应用将无法工作(即不会创建 GLES 上下文)。解决方法是查看 GLSurfaceView 代码,推出自己的代码并尝试每个提供的配置,无论它是否适用于创建上下文。

于 2011-12-18T08:45:09.830 回答