Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 三星设备上的OpenGL渲染问题_Android_Opengl Es 2.0 - Fatal编程技术网

Android 三星设备上的OpenGL渲染问题

Android 三星设备上的OpenGL渲染问题,android,opengl-es-2.0,Android,Opengl Es 2.0,我有一个应用程序使用OpenG ES 2.0绘制一些对象。该应用程序无法在某些三星设备上渲染。我尝试过调试,但似乎顶点和片段着色器存在问题 以下是我的着色器代码: 顶点着色器: attribute vec3 Position; attribute vec4 SourceColor; varying vec4 DestinationColor; uniform mat4 Projection; uniform mat4 Modelview; uniform mat4 CordTransf

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

以下是我的着色器代码: 顶点着色器:

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
    }
}  
我不确定是什么问题,但如果我注释掉片段着色器中的if-else部分,我会得到纹理一致-1。在另一种情况下,它是零。两个着色器编译时都没有任何错误。
它与精度有关吗?请帮我调试这个问题。

我回答了我自己的问题,供稍后参考。我可以解决这个问题

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


我仍然不确定确切的问题是什么,但它可能会帮助那些长期为类似问题苦苦挣扎的人。

我得到了纹理一致性-1你确定这是你的问题吗?如果在着色器中不使用统一,它将被注释掉,那么编译器将其删除是合法的。您的统一返回-1,因为它没有在任何地方使用。我在调试时注释掉了该代码。即使代码没有注释,在设备上渲染也会失败。在这种情况下,纹理一致性为0.0是一致性的法定值,这没有错。