glClearBufferfv не очищает указанное цветовое вложение - PullRequest
0 голосов
/ 12 мая 2018

У меня странная ошибка.Я использую glClearBufferfv (и его версию DSA - glClearNamedFramebufferfv) для очистки цветовых вложений FBO.И что я вижу, так это то, что он очищает буфер рисования, только если я установил параметр drawBuffer равным нулю.Но это не имеет смысла, по крайней мере, исходя из того, как я понимаю документы.У моего FBO есть два цветовых вложения в GL_COLOR_ATTACHMENT0 и GL_COLOR_ATTACHMENT1 соответственно.

Вот что я делаю:

    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, handle)

    //want to clear second attachment
    GLenum buffers[1];
    buffers[0] = GL_COLOR_ATTACHMENT0 + 1;
    glNamedFramebufferDrawBuffers(handle, 1, buffers));
    glViewport(0, 0, w, h));

    float color[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
    glClearNamedFramebufferfv(handle, GL_COLOR,1,color);

Это не очищает вложение второго цвета.Но если я установлю:

   glClearNamedFramebufferfv(handle, GL_COLOR,0,color);

Тогда это произойдет.

Я что-то упускаю из-за параметра drawbuffer в этих функциях?

Работает на NVIDIA GTX960M

PS:

Я прикрепляю текстуры к моим FBO, используя этот метод:

glNamedFramebufferTexture(handle, GL_COLOR_ATTACHMENT0 + 0, texHandle, 0));
glNamedFramebufferTexture(handle, GL_COLOR_ATTACHMENT0 + 1, texHandle, 0)); 

Где no - это модуль вложения.Настройка вложений правильная, поскольку я вижу результаты рисования именно там, где они должны быть.Единственная проблема сейчас - очистить цель рендеринга.

1 Ответ

0 голосов
/ 13 мая 2018

Заблуждение уже выражено в названии вопроса:

glClearBufferfv не очищает указанное цветовое вложение

Один не указывает цветовое вложение для glClearBuffer* / glClearNamedFramebuffer*, но индекс для выбранных в данный момент буферов рисования .

Набор буферов отрисовки находится в состоянии FBO, поэтому, когда вы делаете

buffers[0] = GL_COLOR_ATTACHMENT0 + 1;
glNamedFramebufferDrawBuffers(handle, 1, buffers));

вы установили буферы рисования FBO как набор только из одного:

{GL_COLOR_ATTACHMENT1}

Существует только один буфер отрисовки, поэтому единственный допустимый индекс буфера отрисовки равен 0, а при очистке индекса буфера отрисовки 0 правильно очищается GL_COLOR_ATTACHMENT1.

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