+ const Framebuffer *target = pipeline_state->get_framebuffer();
+ if(!target)
+ throw invalid_operation("OpenGLCommands::clear");
+
+ if(!ARB_direct_state_access)
+ {
+ static Require _req(MSP_clear_buffer);
+ pipeline_state->apply();
+ }
+
+ unsigned i = 0;
+ for(FrameAttachment a: target->get_format())
+ {
+ if(get_attach_point(a)==get_attach_point(DEPTH_ATTACHMENT))
+ {
+ if(ARB_direct_state_access)
+ glClearNamedFramebufferfv(target->id, GL_DEPTH, 0, &values->depth_stencil.depth);
+ else
+ glClearBufferfv(GL_DEPTH, 0, &values->depth_stencil.depth);
+ }
+ else if(get_attach_point(a)==get_attach_point(STENCIL_ATTACHMENT))
+ {
+ if(ARB_direct_state_access)
+ glClearNamedFramebufferiv(target->id, GL_STENCIL, 0, &values->depth_stencil.stencil);
+ else
+ glClearBufferiv(GL_STENCIL, 0, &values->depth_stencil.stencil);
+ }
+ else
+ {
+ if(ARB_direct_state_access)
+ glClearNamedFramebufferfv(target->id, GL_COLOR, i++, &values->color.r);
+ else
+ glClearBufferfv(GL_COLOR, i++, &values->color.r);
+ }
+ ++values;
+ }