PowerVR SGX GPU的OpenGL ES问题

时间:2011-09-07 22:15:13

标签: android opengl-es powervr-sgx

我有一个OpenGL动态壁纸,除了那些配备PowerVR SGX系列的手机外,所有手机都能正常使用。这包括几乎所有三星手机和摩托罗拉Droid系列。壁纸只不过是PowerVR GPU手机上的黑屏。我一直绞尽脑汁想要解决这个问题一周,但没有运气。

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

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

  • glLightfv
  • glMaterialfv
  • glDepthFunc
  • glEnableClientState
  • glViewport
  • glMatrixMode
  • glLoadIdentity
  • gluPerspective
  • glclearcolor
  • glclear
  • glTranslatef
  • glRotatef
  • glVertexPointer
  • glTexCoordPointer
  • glColor4f
  • glNormal3f
  • 调用glDrawArrays
  • glTexParamterx

我正在使用Robert Green的GlWallPaperService并在Trying to draw textured triangles on device fails, but the emulator works. Why?尝试了此解决方案。有没有人知道为什么PowerVR芯片给了我这么难的时间以及我能做些什么呢?

3 个答案:

答案 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代码,推出自己的代码并尝试每个提供的配置,无论它是否适用于创建上下文。