android的OpenGLES2.o代码有什么问题吗?

android的OpenGLES2.o代码有什么问题吗?,android,opengl-es-2.0,Android,Opengl Es 2.0,我正在学习opengl es 2.0 for android教程,该教程来自opengl es 2 for android快速入门指南。我在3.5节,我的“编译”代码不会编译。我已经检查了又检查了一遍,但是我的代码与书中的匹配。我搜索了SO和其他网站,但似乎只是我对这段代码有问题。我曾在AVD和jellybean物理设备上尝试过,但我总是编译着色器失败以下是我尝试编译的代码 顶点代码: attribute vec4 a_Position; void main(){ gl_Position

我正在学习opengl es 2.0 for android教程,该教程来自opengl es 2 for android快速入门指南。我在3.5节,我的“编译”代码不会编译。我已经检查了又检查了一遍,但是我的代码与书中的匹配。我搜索了SO和其他网站,但似乎只是我对这段代码有问题。我曾在AVD和jellybean物理设备上尝试过,但我总是
编译着色器失败
以下是我尝试编译的代码

顶点代码:

 attribute vec4 a_Position;
 void main(){
 gl_Position = a_Position;
 }
片段代码:

precision mediump float;
uniform vec4 u_Color;
void main(){
gl_FragColor = u_Color;
}
查找资源并编译opengl代码的helper类:

public class ShaderHelper {

private static final String TAG = "ShaderHelper";

public static int compileVertexShader(String shaderCode){
    return compileShader(GL_VERTEX_SHADER, shaderCode);
}

public static int compileFragmentShader(String shaderCode){
    return compileShader(GL_FRAGMENT_SHADER, shaderCode);
}

public static int compileShader(int type, String shaderCode){
    final int shaderObjectId = glCreateShader(type);
    if(shaderObjectId == 0){
        if(LoggerConfig.ON){
            Log.w(TAG, "Could not create new shader.");

        }
    }

    final int[] compileStatus = new int[1];
    glGetShaderiv(shaderObjectId, GL_COMPILE_STATUS, compileStatus, 0);

    if(LoggerConfig.ON){
        Log.v(TAG, "Results of compiling source:" + "\n" + shaderCode + "\n:" + glGetShaderInfoLog(shaderObjectId));
    }

    if(compileStatus[0] == 0){
        glDeleteShader(shaderObjectId);
        if(LoggerConfig.ON){
            Log.w(TAG, "Compilation of shader failed."); <--This is where I get notification that the code did not compile...
        }
        return 0;
    }
    return shaderObjectId;
}

public static int linkProgram(int vertexShaderId, int fragmentShaderId){
    final int programObjectId = glCreateProgram();
    if(programObjectId == 0){
        if (LoggerConfig.ON){
            Log.w(TAG, "Could not create new program.");
        }
        return 0;
    }
    glAttachShader(programObjectId, vertexShaderId);
    glAttachShader(programObjectId, fragmentShaderId);

    final int[] linkStatus = new int[1];
    glGetProgramiv(programObjectId, GL_LINK_STATUS, linkStatus, 0);

    if(LoggerConfig.ON){
        Log.v(TAG, "Results of linking program:\n" + glGetProgramInfoLog(programObjectId));
    }

    if(linkStatus[0] == 0){
        glDeleteProgram(programObjectId);
        if(LoggerConfig.ON){
            Log.w(TAG, "Linking of program failed.");
        }
        return 0;
    }

    return programObjectId;
}

public static boolean validateProgram(int programObjectId){
    glValidateProgram(programObjectId);

    final int[] validateStatus = new int[1];
    glGetProgramiv(programObjectId, GL_VALIDATE_STATUS, validateStatus, 0);
    Log.v(TAG, "Results of validating program: " + "\nLog:" + glGetProgramInfoLog(programObjectId));
    return validateStatus[0] != 0;
}
公共类着色器帮助器{
私有静态最终字符串TAG=“ShaderHelper”;
公共静态int编译器EvertexShader(字符串着色器代码){
返回编译器着色器(GL_顶点_着色器,着色器代码);
}
公共静态int编译器ragmentshader(字符串着色器代码){
返回compileShader(GL_FRAGMENT_着色器,shaderCode);
}
公共静态int编译器标头(int类型,字符串着色器代码){
最终int shaderObjectId=glCreateShader(类型);
if(shaderObjectId==0){
if(LoggerConfig.ON){
w(标记“无法创建新着色器”);
}
}
final int[]compileStatus=new int[1];
glGetShaderiv(shaderObjectId,GL_COMPILE_STATUS,compileStatus,0);
if(LoggerConfig.ON){
Log.v(标记,“编译源代码的结果:”+“\n”+shaderCode+”\n:“+glgetshaderingfolog(shaderObjectId));
}
if(compileStatus[0]==0){
glDeleteShader(shaderObjectId);
if(LoggerConfig.ON){

Log.w(标记,“着色器编译失败”);在书中发现了一些错误,在后面的章节中增加了代码行,使以前的版本能够正常工作。

是的,缺少很多调用。
glShaderSource()
glCompileShader()
,等等。