2012-08-24 95 views
0

我有一个应用程序使用OpenG-ES 2.0绘制一些对象。应用程序无法在某些三星设备上渲染。我试过调试,它似乎是顶点和片段着色器的问题。三星设备上的OpenGL渲染问题

这里是我的shader代码:
顶点着色器:

attribute vec3 Position; 
attribute vec4 SourceColor; 

varying vec4 DestinationColor; 

uniform mat4 Projection; 
uniform mat4 Modelview; 
uniform mat4 CordTransform; 
attribute float flag; 
attribute float clubColorFlag; 

attribute vec2 TexCoordIn; // New 
varying vec2 TexCoordOut; // New 
varying float flagS; 
varying float flagClubColorS; 
void main(void) { 
     gl_Position = Projection * Modelview * vec4(Position,1.0); 
     flagS = flag; 
     flagClubColorS = clubColorFlag; 
     if (clubColorFlag == 1.0) { 
      DestinationColor = vec4(0.190,0.309,0.309,1.0); 
     } 
     else { 
      DestinationColor = SourceColor; 
     } 
     exCoordOut = TexCoordIn; 
     gl_PointSize = 1.0; 
    } 

片段着色器:

varying lowp vec4 DestinationColor; 

varying lowp vec2 TexCoordOut; // New 
uniform sampler2D Texture; // New 
varying lowp float flagS; 
varying lowp float flagClubColorS; 
void main(void) { 

    gl_FragColor = DestinationColor; 
    if(flagS == 1.0){ 
     gl_FragColor = DestinationColor; 
    } 
    else if (flagClubColorS == 1.0) { 
     gl_FragColor = DestinationColor; 
    } 
    else if (flagS == 0.0){ 
     gl_FragColor = DestinationColor * texture2D(Texture, TexCoordOut); // New 
    } 
} 

我不知道是什么问题,但我得到质地均匀-1,如果我评论出片段着色器中的if-else部分。在其他情况下,它是零。两种着色器都可以毫无错误地编译。
它与精度有关吗?请帮我调试问题。

+1

*我得到纹理均匀-1 *你确定这是你的问题吗?如果你没有在着色器中使用统一(它被注释掉了),那么编译器就可以将其除掉。你的制服返回-1,因为它没有在任何地方使用。 – Tim

+0

我在调试时已经注释掉了代码。即使有联合国评论的代码,在设备上渲染失败。在这种情况下,纹理统一为0. – Ashwini

+1

0是制服的合法值,这没有什么错。 – Tim

回答

-1

我正在回答我自己的问题,以供将来要参考的人使用。我可以解决这个问题。

问题不在任何一个着色器中。问题是,我使用glDrawElements()方法绘制具有顶点和索引缓冲区的对象。我用glDrawArrays()方法替换了这个调用,只使用顶点缓冲区,一切正常。

我仍然不知道确切的问题,但它可以帮助别人挣扎长类似的问题。