Я вхожу в FBO (Framebuffer Objects) в openGL.Прямо сейчас я просто пытаюсь что-то отрисовать в FBO, а затем использую связанную с ним текстуру для рендеринга этого изображения на экран.Я работал над этой проблемой часами сегодня и вчера.Я пробовал копировать как можно точнее два разных примера, и все же у меня все та же проблема.Я абсолютно застрял.
Кажется, что происходит то, что объект кадрового буфера фактически не связывается.В коде у меня есть два набора команд glClear () и glClearColor (): первая для рисования в буфер кадров, а вторая для рисования на экран.Однако, когда я закомментирую второй набор, первый набор явно влияет на экран.Если FBO привязано, не должно ли оно получать эти команды, и не напрямую влияет на фактический вывод на экран?
Для начала я использую glewInit (), а затем создаюFBO, а затем объект Renderbuffer и текстуру, связанную с ним, и выполните все необходимые шаги, чтобы собрать все это вместе:
glewInit();
int width=512,height=512;
glGenFramebuffers(1, &fbo);
glGenRenderbuffers(1, &rbo);
glGenTextures(1, &fboTex);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glBindTexture(GL_TEXTURE_2D, fboTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_INT, NULL);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fboTex, 0);
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
assert(status==GL_FRAMEBUFFER_COMPLETE);
glBindTexture(GL_TEXTURE_2D,0);
glBindFramebuffer(GL_FRAMEBUFFER,fbo);
Затем я рисую объект framebuffer.
glClearColor(0.5,0.5,0.5,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glColor4f(1.0,0,0,1);
glBegin(GL_QUADS);
glVertex2f(100,100);
glVertex2f(200,100);
glVertex2f(200,250);
glVertex2f(100,200);
glEnd();
Затем я связываю каждый из следующих трех объектов:
glBindFramebuffer(GL_FRAMEBUFFER,0);
glBindRenderbuffer(GL_RENDERBUFFER,0);
glBindTexture(GL_TEXTURE_2D,0);
Затем я пытаюсь нарисовать текстуру в окне:
glEnable(GL_TEXTURE_2D);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTextureEXT(GL_TEXTURE_2D, fboTex);
glBegin(GL_QUADS);
glTexCoord2f(0,0);glVertex3f(-.5,-.5,0);
glTexCoord2f(1,0);glVertex3f(.5,-.5,0);
glTexCoord2f(1,1);glVertex3f(.5,.5,0);
glTexCoord2f(0,1);glVertex3f(-.5,.5,0);
glEnd();
glDisable(GL_TEXTURE_2D);
glFlush();
Это должно бытьили какая-то действительно простая ошибка или недоразумение, которое каким-то образом избежало уничтожения, когда я заново набрал все эти дважды , или проблема с драйверами?Предполагается, что мой драйвер может работать с версией 3.2 openGL ...
Любая помощь по этому разочаровывающему вопросу была бы великолепной.
РЕДАКТИРОВАТЬ: я узнал, что я в конечном итоге делал неправильно.Я не осознавал, что команды glColor влияют на любой выполненный рисунок, независимо от того, есть ли у вас в данный момент рамочный буфер или нет.Мне нужно было поменять glColor back на (1,1,1) после рисования в FBO, чтобы позже визуализировать текстуру FBO со всем ее цветом.