2012-08-24 96 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()方法替換了這個調用,只使用頂點緩衝區,一切正常。

我仍然不知道確切的問題,但它可以幫助別人掙扎長類似的問題。