LINUX.ORG.RU

История изменений

Исправление 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));
        }
Код ShaderUtils гдето здесь: https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/openg... 6. Не нужно стопать поток во время отрисовки. Для поддержания заданого FPS просто не вызывай лишний раз draw();
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));
        }
Код ShaderUtils гдето здесь: https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/openg... 6. Не нужно стопать поток во время отрисовки. Для поддержания заданого FPS просто не вызывай лишний раз draw();
7. И самое главное - внимательно изучи материалы с этого ресурса, как минимум конкретно эту статью: http://learnopengl.com/#!Getting-started/Hello-Triangle.