Я получаю GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT за второе созданное FBO, но не за первое - PullRequest
0 голосов
/ 02 января 2019

У меня было приложение OpenGL с одним FBO помимо стандартного буфера кадров. Все работало нормально.

Затем я попытался добавить второй FBO, используя тот же код, который я использовал для первого, и вдруг он больше не работает. Только для второго FBO я получаю следующий статус: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

Мой первый FBO по-прежнему работает так, как задумано, без проблем. Я дважды и трижды проверил, что оба FBO генерируются с одинаковым кодом. Я даже снова просмотрел вики-страницы OpenGL по адресу www.khronos.org/opengl/wiki/, чтобы убедиться, что я правильно использовал все эти методы OpenGL.

Я проверяю ошибки OpenGL после каждого отдельного вызова функции OpenGL.

public void createFBO(int width, int height) {
    glNameFbo = glGenFramebuffers();
    checkForGLErrors();
    glBindFramebuffer(GL_FRAMEBUFFER, glNameFbo);
    checkForGLErrors();

    glEnable(GL_TEXTURE_2D);
    checkForGLErrors();
    glNameTex = GL11.glGenTextures();
    checkForGLErrors();
    glBindTexture(GL_TEXTURE_2D, glNameTex);
    checkForGLErrors();
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL11.GL_RGBA, GL_UNSIGNED_BYTE, 0);
    checkForGLErrors();
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    checkForGLErrors();
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    checkForGLErrors();

    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glNameTex, 0);
    checkForGLErrors();
    glDrawBuffers(GL_COLOR_ATTACHMENT0);
    checkForGLErrors();

    int fboStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);
    checkForGLErrors();
    if(fboStatus != GL_FRAMEBUFFER_COMPLETE) {
        System.err.println("Error when creating FBO: "+getFrameBufferStatus(fboStatus));
    }
    glBindFramebuffer(GL_FRAMEBUFFER, 0);
    checkForGLErrors();
}

Спасибо всем, кто может вести меня в правильном направлении!

1 Ответ

0 голосов
/ 02 января 2019

Хорошо, я тупой. Как было отмечено в комментариях, выяснилось, что проблема была в «ширине» и «высоте», которые я передал своим методам создания FBO. Мой первый FBO был создан с размером окна, но у моего второго FBO было 0 передано для обоих измерений.

Код из вопроса вроде в порядке.

...