Ошибка создания объекта Framebuffer - PullRequest
3 голосов
/ 01 декабря 2011

РЕДАКТИРОВАНИЕ: РЕШЕНО

Я столкнулся с проблемой при попытке визуализации в текстуру. Я создаю объект фреймбуфера следующим образом:

glGenTextures(1, &renderFBOtex);
glBindTexture(GL_TEXTURE_2D, renderFBOtex);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);

glGenRenderbuffers(1, &renderFBOrender);
glBindRenderbuffer(GL_RENDERBUFFER, renderFBOrender);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);

glGenFramebuffers(1, &renderFBO);
glBindFramebuffer(GL_FRAMEBUFFER, renderFBO);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderFBOtex, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderFBOrender);

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

Но возвращаемое значение glCheckFrambufferStatus всегда равно GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT.

Проблема, похоже, связана с текстурой, так же как и без вложения Renderbuffer. Рисование в самом Framebuffer не должно быть проблемой.

Может кто-нибудь указать, что мне здесь не хватает?

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Создайте текстурные карты перед тем, как прикрепить их к цветному буферу.

Подпрограмма, предназначенная для этой задачи: glGenerateMipmap .


Еще одно предложение - игратьс текстурой внутреннего формата.Вы не указываете размер внутреннего формата.Поскольку одной из причин ошибки является то, что текстура не имеет поддерживаемого внутреннего формата с возможностью цветопередачи, вы можете попробовать.

1 голос
/ 03 декабря 2011

Проблема была в другой части программы. Это была очень глупая ошибка, которая привела к использованию неправильно инициализированных значений для ширины и высоты текстуры. Они оба были установлены в 0, следовательно, неполная ошибка вложения.

0 голосов
/ 01 декабря 2011

Попробуйте:

glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderFBOtex, 0);
                          ^^^^

Технически они не должны иметь никакого значения, но некоторые драйверы могут иметь эту ошибку.

...