GlBlitFramebuffer — glReadBuffer и glDrawBuffer относятся к одному и тому же буферу.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 GlBlitFramebuffer — glReadBuffer и glDrawBuffer относятся к одному и тому же буферу.

Сообщение Anonymous »

Только в целях обучения я проверяю, что происходит, когда я вызываю glBlitFramebuffer, когда glReadBuffer и glDrawBuffer ссылаются на один и тот же буфер. Пользовательский фреймбуфер определяется следующим образом:

Код: Выделить всё

bool initFBO()
{
glGenFramebuffers(1, &fboId);
glBindFramebuffer(GL_FRAMEBUFFER, fboId);

glGenTextures(1, &fboTexId);
glBindTexture(GL_TEXTURE_2D, fboTexId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fboTexId, 0);

GLuint rboDepth;
glGenRenderbuffers(1, &rboDepth);
glBindRenderbuffer(GL_RENDERBUFFER, rboDepth);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, w, h);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboDepth);

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

if (status != GL_FRAMEBUFFER_COMPLETE)
{
return false;
}

return true;
}
Вот рендеринг:

Код: Выделить всё

glBindFramebuffer(GL_FRAMEBUFFER, fboId);

render();
//now fboTexId is filled

glBindFramebuffer(GL_READ_FRAMEBUFFER, fboId);
glReadBuffer(GL_COLOR_ATTACHMENT0);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fboId);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
glBlitFramebuffer(0, 0, w, h, 0, 0, w / 2, h / 2, GL_COLOR_BUFFER_BIT, GL_LINEAR);

glBindFramebuffer(GL_FRAMEBUFFER, 0);

//render to the screen
renderTex(fboTexId);
Когда я отображаю текстуру fbo на экране, я получаю результат функции рендеринга — glBlitFramebuffer ничего не делает. Я ожидал получить результат функции рендеринга со вторым слоем сверху в два раза меньше. Я не знаю, разрешен ли вызов glReadBuffer и glDrawBuffer с одним и тем же аргументом. Должно ли это работать так, как я ожидал?

Подробнее здесь: https://stackoverflow.com/questions/781 ... ame-buffer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»