Запись в renderbuffer И отображение с OpenGL с одним вызовом render - PullRequest
2 голосов
/ 15 октября 2019

Есть ли способ рендеринга в буфер рендеринга и на дисплей без необходимости многократного вызова функции рисования? Я хотел что-то вроде этого:

glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE2D, tbo, 0);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
GLenum* attachments[2] = {GL_COLOR_ATTACHMENT0, ...} //with the second I want to render to screen which would have the same value like the first
glDrawBuffer(2, attachments);

glDrawElements(GL_TRIANGLES, 12*3, GL_UNSIGNED_INT, 0);

Так что я могу использовать то, что нарисовал одновременно, как текстуру для другого rendercall. Я мог бы просто написать

glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDrawElements(GL_TRIANGLES, 12*3, GL_UNSIGNED_INT, 0);

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

1 Ответ

3 голосов
/ 15 октября 2019

Вы можете скопировать буфер кадра в другой, используя glBlitFramebuffer().

Что-то вроде:

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBlitFramebuffer(
    0, 0, fboWidth, fboHeight,
    0, 0, screenWidth, screenHeight,
    GL_COLOR_BUFFER_BIT, GL_NEAREST);

должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...