- glEnable(GL_SCISSOR_TEST);
- glScissor(scissor->left, scissor->bottom, scissor->width, scissor->height);
+ Rect fb_rect = framebuffer->get_rect();
+ if(changes&(PipelineState::VIEWPORT|PipelineState::FRAMEBUFFER))
+ {
+ Rect viewport = fb_rect.intersect(self.viewport);
+ glViewport(viewport.left, viewport.bottom, viewport.width, viewport.height);
+ }
+ if(changes&(PipelineState::SCISSOR|PipelineState::FRAMEBUFFER))
+ {
+ Rect scissor = fb_rect.intersect(self.scissor);
+ if(scissor!=fb_rect)
+ {
+ glEnable(GL_SCISSOR_TEST);
+ glScissor(scissor.left, scissor.bottom, scissor.width, scissor.height);
+ }
+ else
+ glDisable(GL_SCISSOR_TEST);
+ }