【发布时间】:2015-08-20 05:26:57
【问题描述】:
我正在尝试制作一个使用 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;
}
片段着色器
精度中等p float;
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];
}
我不知道如何解决这个问题。
【问题讨论】:
-
你在哪里创建着色器/调用 glCreateShader?我猜想 vertexShaderId 不是 GL_VERTEX_SHADER 类型,或者 fragmentShaderId 不是 GL_FRAGMENT_SHADER 类型。
-
我根据来源传入GL_VERTEX_SHADER或GL_FRAGMENT_SHADER。
-
没关系。没有很清楚地考虑返回值。我没有返回着色器的 id,而是返回了一些垃圾。