Android OpenGL ES 2.0:着色器链接失败

Android OpenGL ES 2.0:着色器链接失败,android,c++,opengl-es,Android,C++,Opengl Es,我正在尝试使用openGL制作一个简单的android程序。到目前为止,着色器链接失败,日志信息为 日志 Link info --------- OpenGL ES programs must have both a vertex and a fragment shader or a compute shader. 着色器编译工作正常。以下是着色器代码: 顶点着色器 attribute vec4 a_Position; void main() { gl_Posit

我正在尝试使用openGL制作一个简单的android程序。到目前为止,着色器链接失败,日志信息为

日志

Link info
    ---------
    OpenGL ES programs must have both a vertex and a fragment shader or a compute shader.  
着色器编译工作正常。以下是着色器代码:

顶点着色器

attribute vec4 a_Position;

void main() {
    gl_Position = a_Position;
    gl_PointSize = 10.0;
}  
片段着色器
精密中泵浮子

uniform vec4 u_Color;

void main()
{
    gl_FragColor = u_Color;
}  
我正在采取的步骤是

final int programObjectId = glCreateProgram();

if(programObjectId == 0)
   return 0;

glAttachShader(programObjectId, vertexShaderId);
glAttachShader(programObjectId, fragmentShaderId);
glLinkProgram(programObjectId);
编译代码

public static int compileShader(int type, String code) {

    final int shaderObjectId = glCreateShader(type);

    glShaderSource(shaderObjectId, code);
    glCompileShader(shaderObjectId);
    int compilationStatus[] = new int[1];
    glGetShaderiv(shaderObjectId, GL_COMPILE_STATUS, compilationStatus, 0);

    if(compilationStatus[0] == 0)
        glDeleteShader(shaderObjectId);
    return shaderObjectId & compilationStatus[0];
}

我不知道如何解决这个问题。

问题在于
编译器加载程序的最后一行:在这里,您对shaderObjectId(任意数字>0)和compileStatus(GL_TRUE或GL_FALSE)执行按位and操作。由于GL_TRUE=1和GL_FALSE=0,此操作的结果只能是0或1

让我们看看GL_TRUE的情况,因为GL_FALSE的结果无论如何都是0

For every even number x:
x & 1 == 1
For every odd number x:
x & 1 == 0

这意味着,如果shaderObjectId=3(例如),函数将返回1。

在哪里创建着色器/调用glCreateShader?我猜vertexShaderId不是类型GL\U VERTEX\U着色器,或者fragmentShaderId不是类型GL\U FRAGMENT\U着色器。我根据source.Nevermind传入GL\U VERTEX\U着色器或GL\U FRAGMENT\U着色器。没有很清楚地考虑返回值。我没有返回着色器的id,而是返回了一些垃圾。