diff --git a/src/Magnum/AbstractFramebuffer.cpp b/src/Magnum/AbstractFramebuffer.cpp index f16c5680e..260c6d605 100644 --- a/src/Magnum/AbstractFramebuffer.cpp +++ b/src/Magnum/AbstractFramebuffer.cpp @@ -199,6 +199,7 @@ void AbstractFramebuffer::blitImplementationNV(AbstractFramebuffer& source, Abst #endif AbstractFramebuffer& AbstractFramebuffer::setViewport(const Range2Di& rectangle) { + CORRADE_INTERNAL_ASSERT(rectangle != Implementation::FramebufferState::DisengagedViewport); _viewport = rectangle; /* Update the viewport if the framebuffer is currently bound */ @@ -211,8 +212,7 @@ AbstractFramebuffer& AbstractFramebuffer::setViewport(const Range2Di& rectangle) void AbstractFramebuffer::setViewportInternal() { Implementation::FramebufferState& state = *Context::current()->state().framebuffer; - /* We are using empty viewport to indicate disengaged state */ - CORRADE_INTERNAL_ASSERT(_viewport != Range2Di{}); + CORRADE_INTERNAL_ASSERT(_viewport != Implementation::FramebufferState::DisengagedViewport); CORRADE_INTERNAL_ASSERT(state.drawBinding == _id); /* Already up-to-date, nothing to do */ diff --git a/src/Magnum/DefaultFramebuffer.cpp b/src/Magnum/DefaultFramebuffer.cpp index b36b78976..5f7e47dd1 100644 --- a/src/Magnum/DefaultFramebuffer.cpp +++ b/src/Magnum/DefaultFramebuffer.cpp @@ -101,6 +101,7 @@ void DefaultFramebuffer::initializeContextBasedFunctionality(Context& context) { GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); defaultFramebuffer._viewport = state.viewport = Range2Di::fromSize({viewport[0], viewport[1]}, {viewport[2], viewport[3]}); + CORRADE_INTERNAL_ASSERT(defaultFramebuffer._viewport != Implementation::FramebufferState::DisengagedViewport); /* Fake initial glViewport() call for ApiTrace */ #ifndef MAGNUM_TARGET_GLES diff --git a/src/Magnum/Framebuffer.cpp b/src/Magnum/Framebuffer.cpp index a17960ae4..8cdaa8d91 100644 --- a/src/Magnum/Framebuffer.cpp +++ b/src/Magnum/Framebuffer.cpp @@ -80,6 +80,7 @@ Int Framebuffer::maxColorAttachments() { } Framebuffer::Framebuffer(const Range2Di& viewport) { + CORRADE_INTERNAL_ASSERT(viewport != Implementation::FramebufferState::DisengagedViewport); _viewport = viewport; (this->*Context::current()->state().framebuffer->createImplementation)(); CORRADE_INTERNAL_ASSERT(_id != Implementation::State::DisengagedBinding); diff --git a/src/Magnum/Implementation/FramebufferState.cpp b/src/Magnum/Implementation/FramebufferState.cpp index 1a767aa0e..16eb19d8b 100644 --- a/src/Magnum/Implementation/FramebufferState.cpp +++ b/src/Magnum/Implementation/FramebufferState.cpp @@ -33,10 +33,13 @@ namespace Magnum { namespace Implementation { -FramebufferState::FramebufferState(Context& context, std::vector& extensions): readBinding(0), drawBinding(0), renderbufferBinding(0), maxDrawBuffers(0), maxColorAttachments(0), maxRenderbufferSize(0), maxSamples(0) +constexpr const Range2Di FramebufferState::DisengagedViewport; + +FramebufferState::FramebufferState(Context& context, std::vector& extensions): readBinding{0}, drawBinding{0}, renderbufferBinding{0}, maxDrawBuffers{0}, maxColorAttachments{0}, maxRenderbufferSize{0}, maxSamples{0}, #ifndef MAGNUM_TARGET_GLES - , maxDualSourceDrawBuffers(0) + maxDualSourceDrawBuffers{0}, #endif + viewport{DisengagedViewport} { /* Create implementation */ #ifndef MAGNUM_TARGET_GLES @@ -236,7 +239,7 @@ FramebufferState::FramebufferState(Context& context, std::vector& e void FramebufferState::reset() { readBinding = drawBinding = renderbufferBinding = State::DisengagedBinding; - viewport = {}; + viewport = DisengagedViewport; } }} diff --git a/src/Magnum/Implementation/FramebufferState.h b/src/Magnum/Implementation/FramebufferState.h index 5754a6b3f..745e88a25 100644 --- a/src/Magnum/Implementation/FramebufferState.h +++ b/src/Magnum/Implementation/FramebufferState.h @@ -33,6 +33,8 @@ namespace Magnum { namespace Implementation { struct FramebufferState { + constexpr static const Range2Di DisengagedViewport{}; + explicit FramebufferState(Context& context, std::vector& extensions); void reset();