Я пытаюсь создать простую программу для Android, которая использует openGL. До сих пор, шейдер сшивание терпит неудачу, и информация журнала естьOpenGL ES 2.0: Shader Linking Fail
LOG
Link info
---------
OpenGL ES programs must have both a vertex and a fragment shader or a compute shader.
Шейдер сборник работает отлично. Вот код шейдера:
Vertex Shader
attribute vec4 a_Position;
void main() {
gl_Position = a_Position;
gl_PointSize = 10.0;
}
Фрагмент Shader
точность mediump поплавок;
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, либо фрагментShaderId не имеет тип GL_FRAGMENT_SHADER. – BDL
Я перехожу в GL_VERTEX_SHADER или GL_FRAGMENT_SHADER на основе источника. – brainfreak
Nevermind. Не очень хорошо думал о возвращаемых значениях. Вместо того, чтобы возвращать идентификатор шейдера, я возвращаю некоторый барахло. – brainfreak