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,因爲它沒有在任何地方使用。 – Tim
我在調試時已經註釋掉了代碼。即使有聯合國評論的代碼,在設備上渲染失敗。在這種情況下,紋理統一爲0. – Ashwini
0是制服的合法值,這沒有什麼錯。 – Tim