2012-09-03 220 views
3

我正在研究一款在很多Android设备(雷克萨斯7,SG ACe,HTC Desire ...)上运行良好的游戏。但特别是对于SGS1,我无法比黑屏更好。 在对整个代码进行了大量调查后,我认为该问题位于我的着色器代码中。编译正常,链接,但我却听到不同的GPU(这里http://www.jpct.net/forum2/index.php/topic,2833.15.html例如)与SGS1的黑色屏幕

这里存在兼容年代shader代码:

[VERTEX]

uniform mat4 uMVPMatrix; // Ortho matrix 
attribute vec2 vPosition; // Vertex position 
void main(){ 
    gl_Position = uMVPMatrix * vec4(vPosition, 0.0, 1.0); 
} 

[片段]

precision mediump float; 
uniform lowp vec4 CurColor; 
void main(){ 
    gl_FragColor = CurColor; 
} 

也许这件事显然是错误的,即使它是非常基本的?先谢谢你。

回答

0

这里有一些建议:

  • 试试,看看是否有任何的logcat错误
  • 看看glGetError()返回的东西从0
  • 更改鲜明的色彩不同,看是否仍然黑屏,如果它发生变化,那么你的物体是不可见的

在你尝试其中的一些后评论我。

+0

我尝试了你的建议,并且:screen is all green。 glGetError()在我的手机(三星Ace:GT-S5830)中返回了我修正的许多错误,但没有出现在SGS1上。这很奇怪! LogCat中没有错误(如果需要,我可以发布样本)。任何其他想法? – Tcheg

+0

我已经尝试了很多东西,并通过一个简单的着色器将我的游戏减少到了最低限度。屏幕总是空的!我想知道GLES20.glEnable(GLES20.GL_TEXTURE_2D)的纹理启用:opengl es 2需要吗?这条生产线能否使整个过程崩溃? – Tcheg

+0

不,这是必要的。当您更改清除颜色时,您的颜色是否会改变? – dragostis

1

我终于明白了。我有2个问题:

1)的PowerVR似乎不喜欢“lowp”限定符用于其它着色均匀

2),我不得不“vec4”的vPosition,虽然我只传递2个分量由顶点(X ,Y)。奇怪的是:为什么其他GPU可以处理这样的错误?像mali(malideveloper.com/developer-resources/tools/...)提供的检查器对于PowerVR来说是非常令人耳目一新的!