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