История изменений
Исправление ii8_, (текущая версия) :
Здесь может быть 100500 мест где возможный косяки.
1. не понятно скомпилился шейдер или нет. Есть ли там проверка что шейдер id не равен нулю?
2. VBO адрес массива в памяти, т.е. это либо int[], либо IntBuffer.
3. Ну или вообще не понимаю что делаешь с vertexBuffer... Да и зачем тебе сначала ByteBuffer?
4. GLES20.glEnableVertexAttribArray(mPositionHandle); - А вот это вообще что? :) Очень похоже как будто ты хотел активировать VAO, только причём тут ссылка на отрибут шейдера?
5. Проверка на ошибки делается не совсем так. Да и проверки эти нужно на подготовительной стадии проводить. пока грузятся шейдеры и программа. В цикле отрисовки это не нужно. После операции с видеокартой нужно проверить нет ли ошибки и если есть получить её текст. Только так. Вот пример:
LOG.debug("Linking program");
gl.glLinkProgram(programId);
LOG.debug("Checking for errors");
int[] error = new int[1];
gl.glGetProgramiv(programId, GL_LINK_STATUS, error, 0);
if (GL_FALSE == error[0]) {
LOG.debug("Linking Error!");
String errorLog = ShaderUtil.getProgramInfoLog(gl, programId);
int temp = programId;
gl.glDeleteProgram(programId);
gl.glDeleteShader(vertexShaderId);
gl.glDeleteShader(fragmentShaderId);
throw new GLException(String.format("Failed to link GLSL program with id : %s\n Error: %s", temp, errorLog));
}
7. И самое главное - внимательно изучи материалы с этого ресурса, как минимум конкретно эту статью: http://learnopengl.com/#!Getting-started/Hello-Triangle.
Исходная версия ii8_, :
Здесь может быть 100500 мест где возможный косяки.
1. не понятно скомпилился шейдер или нет. Есть ли там проверка что шейдер id не равен нулю?
2. VBO адрес массива в памяти, т.е. это либо int, либо IntBuffer.
3. Ну или вообще не понимаю что делаешь с vertexBuffer... Да и зачем тебе сначала ByteBuffer?
4. GLES20.glEnableVertexAttribArray(mPositionHandle); - А вот это вообще что? :) Очень похоже как будто ты хотел активировать VAO, только причём тут ссылка на отрибут шейдера?
5. Проверка на ошибки делается не совсем так. Да и проверки эти нужно на подготовительной стадии проводить. пока грузятся шейдеры и программа. В цикле отрисовки это не нужно. После операции с видеокартой нужно проверить нет ли ошибки и если есть получить её текст. Только так. Вот пример:
LOG.debug("Linking program");
gl.glLinkProgram(programId);
LOG.debug("Checking for errors");
int[] error = new int[1];
gl.glGetProgramiv(programId, GL_LINK_STATUS, error, 0);
if (GL_FALSE == error[0]) {
LOG.debug("Linking Error!");
String errorLog = ShaderUtil.getProgramInfoLog(gl, programId);
int temp = programId;
gl.glDeleteProgram(programId);
gl.glDeleteShader(vertexShaderId);
gl.glDeleteShader(fragmentShaderId);
throw new GLException(String.format("Failed to link GLSL program with id : %s\n Error: %s", temp, errorLog));
}
7. И самое главное - внимательно изучи материалы с этого ресурса, как минимум конкретно эту статью: http://learnopengl.com/#!Getting-started/Hello-Triangle.