- if(color_bufs.empty())
- {
- glDrawBuffer(GL_NONE);
- glReadBuffer(GL_NONE);
- }
- else if(color_bufs.size()==1)
- {
- glDrawBuffer(color_bufs.front());
- glReadBuffer(color_bufs.front());
- }
- else
- {
- static Require _req(ARB_draw_buffers);
- glDrawBuffers(color_bufs.size(), &color_bufs[0]);
- glReadBuffer(color_bufs.front());
- }
+ if(attch.attachment>=COLOR_ATTACHMENT0 && attch.attachment<=COLOR_ATTACHMENT3)
+ color_bufs.push_back(attch.attachment);
+ }
+
+ if(color_bufs.size()>1)
+ static Require _req(ARB_draw_buffers);
+
+ GLenum first_buffer = (color_bufs.empty() ? GL_NONE : color_bufs.front());
+ if(ARB_direct_state_access)
+ {
+ /* ARB_direct_state_access ties the availability of these functions to
+ framebuffers themselves, so no further checks are needed. */
+ glNamedFramebufferDrawBuffers(id, color_bufs.size(), &color_bufs[0]);
+ glNamedFramebufferReadBuffer(id, first_buffer);