Android OpenGL ES 2.0着色器--错误在哪一行?

Android OpenGL ES 2.0着色器--错误在哪一行?,android,opengl-es,Android,Opengl Es,在android OpenGL ES 2.0着色器中,如果出现错误,如何找出错误所在的着色器行??我有一些这样的代码: public static int loadShader(int type, String shaderCode){ int shader = GLES20.glCreateShader(type); // add the source code to the shader and compile it GLES20.glSha

在android OpenGL ES 2.0着色器中,如果出现错误,如何找出错误所在的着色器行??我有一些这样的代码:

public static int loadShader(int type, String shaderCode){

        int shader = GLES20.glCreateShader(type);
        // add the source code to the shader and compile it
        GLES20.glShaderSource(shader, shaderCode);
        GLES20.glCompileShader(shader);

        final int[] compileStatus = new int[1];
        GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compileStatus, 0);

        if (compileStatus[0] != 1) { // 1 is normal output
            if (type == GLES20.GL_VERTEX_SHADER) {
                System.out.println("vertex -- ");
            }
            else if (type == GLES20.GL_FRAGMENT_SHADER)  {
                System.out.println("fragment -- ");
            }
            System.out.println(type + " error " + compileStatus[0]);
            if (compileStatus[0] == GLES20.GL_TRUE) System.out.println("true");
        }

        return shader;
    }
它总是说我的着色器构建正确。同时,我稍后运行此代码:

    System.out.println(GLES20.glGetShaderInfoLog(mProgramHandle));
它说我有一个错误。这是错误消息:

W/Adreno-ES20﹕ <core_glGetShaderiv:443>: GL_INVALID_OPERATION

您是否认为mProgramHandle指向有效的着色器句柄?对我来说,glGetShaderInfoLog似乎产生了GL_INVALID_操作如果变量命名有任何指示,
mProgramHandle
很可能是程序句柄,而不是着色器句柄。那么你是说我应该在glGetShaderInfoLog命令中放置mVertexShader或mfFragmentShader?如果我这样做,就不会有任何类型的错误消息。我稍微编辑了我的原始帖子,以包含更多使用着色器加载程序的代码。这是我一直面临的问题,我可以让这段代码在一台设备上运行,但当我在任何其他设备上测试它时,它都不起作用。当我在一台“有问题”的设备上启动应用程序时,我正在寻找的图像似乎在屏幕上闪烁。错误日志似乎不够有用。我想任何建议都是欢迎的。
private int prepGLShader() {

        int mProgramHandle = 0;
        mProgramHandle = GLES20.glCreateProgram();             // create empty OpenGL ES Program

        String vertex = readTextFileFromRawResource(context, R.raw.vert_mask);
        String fragment = readTextFileFromRawResource(context, R.raw.frag_mask);

        mVertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertex);
        mFragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragment);

        GLES20.glAttachShader(mProgramHandle, mVertexShader);   // add the vertex shader to program
        GLES20.glAttachShader(mProgramHandle, mFragmentShader); // add the fragment shader to program

        GLES20.glBindAttribLocation(mProgramHandle, 0, "a_Position");
        GLES20.glBindAttribLocation(mProgramHandle, 1, "a_TexCoordinate");


        GLES20.glLinkProgram(mProgramHandle);



        return mProgramHandle;
    }