У меня было приложение 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();
}
Спасибо всем, кто может вести меня в правильном направлении!