У меня странная ошибка.Я использую 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 - это модуль вложения.Настройка вложений правильная, поскольку я вижу результаты рисования именно там, где они должны быть.Единственная проблема сейчас - очистить цель рендеринга.