Android OpenGL ES 2.0:着色器链接失败
我正在尝试使用openGL制作一个简单的android程序。到目前为止,着色器链接失败,日志信息为 日志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
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,而是返回了一些垃圾。