OpenGL ES сглаживание с рендерингом с использованием GL_LINES - PullRequest
0 голосов
/ 13 сентября 2018

Я изо всех сил стараюсь рендерить плавные линии, используя GL_LINES. Я заимствовал MultisampleConfigChooser по следующей ссылке: MultisampleConfigChooser.java

Казалось, что нашел мультисэмпл конфигурации без каких-либо ошибок. Вот код, который я использую для визуализации линий на экране:

    GLES20.glUseProgram(this.lineDrawProgram);

    GLES20.glEnableVertexAttribArray(mPositionHandle);
    GLES20.glVertexAttribPointer(
            mPositionHandle, 2,
            GLES20.GL_FLOAT, false,
            6*4, linesData);

    linesData.position(2);

    GLES20.glEnableVertexAttribArray(mColorHandle);

    GLES20.glVertexAttribPointer(
            mColorHandle, 4,
            GLES20.GL_FLOAT, false,
            6*4, linesData);

    linesData.position(0);

    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, matrix, 0);

    GLES20.glDrawArrays(GLES20.GL_LINES, 0, this.numLines*2);

    GLES20.glDisableVertexAttribArray(mPositionHandle);
    GLES20.glDisableVertexAttribArray(mColorHandle);

Смешивание включено с GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA. Еще одно упоминание - я рисую линии для текстуры, которая привязана к FBO как цветовая привязка. Я не добавил никакого дополнительного кода для включения мультисэмплинга для FBO.

Вот код, который я использую для настройки FBO и текстуры:

    int[] fbo = new int[1];
    int[] tex = new int[1];
    enGLES20.glGenTextures(1, tex, 0);
    GLES20.glGenFramebuffers(1, fbo, 0);

    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, tex[0]);
    GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0,GLES20.GL_RGBA, this.width, this.height, 0,GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);

    GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fbo[0]);
    GES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, tex[0], 0);
    GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);

Результирующие строки все еще выглядят как дерьмо: screenshot

Пожалуйста, помогите мне сделать так, чтобы эти линии выглядели гладкими. КСТАТИ На скриншоте много разных маленьких линий, никаких кривых или каких-то экзотических.

...