Browse Source

Parametrize disengaged viewport instead of using default-constructed value.

pull/94/head
Vladimír Vondruš 11 years ago
parent
commit
74e16782ad
  1. 4
      src/Magnum/AbstractFramebuffer.cpp
  2. 1
      src/Magnum/DefaultFramebuffer.cpp
  3. 1
      src/Magnum/Framebuffer.cpp
  4. 9
      src/Magnum/Implementation/FramebufferState.cpp
  5. 2
      src/Magnum/Implementation/FramebufferState.h

4
src/Magnum/AbstractFramebuffer.cpp

@ -199,6 +199,7 @@ void AbstractFramebuffer::blitImplementationNV(AbstractFramebuffer& source, Abst
#endif #endif
AbstractFramebuffer& AbstractFramebuffer::setViewport(const Range2Di& rectangle) { AbstractFramebuffer& AbstractFramebuffer::setViewport(const Range2Di& rectangle) {
CORRADE_INTERNAL_ASSERT(rectangle != Implementation::FramebufferState::DisengagedViewport);
_viewport = rectangle; _viewport = rectangle;
/* Update the viewport if the framebuffer is currently bound */ /* Update the viewport if the framebuffer is currently bound */
@ -211,8 +212,7 @@ AbstractFramebuffer& AbstractFramebuffer::setViewport(const Range2Di& rectangle)
void AbstractFramebuffer::setViewportInternal() { void AbstractFramebuffer::setViewportInternal() {
Implementation::FramebufferState& state = *Context::current()->state().framebuffer; Implementation::FramebufferState& state = *Context::current()->state().framebuffer;
/* We are using empty viewport to indicate disengaged state */ CORRADE_INTERNAL_ASSERT(_viewport != Implementation::FramebufferState::DisengagedViewport);
CORRADE_INTERNAL_ASSERT(_viewport != Range2Di{});
CORRADE_INTERNAL_ASSERT(state.drawBinding == _id); CORRADE_INTERNAL_ASSERT(state.drawBinding == _id);
/* Already up-to-date, nothing to do */ /* Already up-to-date, nothing to do */

1
src/Magnum/DefaultFramebuffer.cpp

@ -101,6 +101,7 @@ void DefaultFramebuffer::initializeContextBasedFunctionality(Context& context) {
GLint viewport[4]; GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport); glGetIntegerv(GL_VIEWPORT, viewport);
defaultFramebuffer._viewport = state.viewport = Range2Di::fromSize({viewport[0], viewport[1]}, {viewport[2], viewport[3]}); 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 */ /* Fake initial glViewport() call for ApiTrace */
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES

1
src/Magnum/Framebuffer.cpp

@ -80,6 +80,7 @@ Int Framebuffer::maxColorAttachments() {
} }
Framebuffer::Framebuffer(const Range2Di& viewport) { Framebuffer::Framebuffer(const Range2Di& viewport) {
CORRADE_INTERNAL_ASSERT(viewport != Implementation::FramebufferState::DisengagedViewport);
_viewport = viewport; _viewport = viewport;
(this->*Context::current()->state().framebuffer->createImplementation)(); (this->*Context::current()->state().framebuffer->createImplementation)();
CORRADE_INTERNAL_ASSERT(_id != Implementation::State::DisengagedBinding); CORRADE_INTERNAL_ASSERT(_id != Implementation::State::DisengagedBinding);

9
src/Magnum/Implementation/FramebufferState.cpp

@ -33,10 +33,13 @@
namespace Magnum { namespace Implementation { namespace Magnum { namespace Implementation {
FramebufferState::FramebufferState(Context& context, std::vector<std::string>& 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<std::string>& extensions): readBinding{0}, drawBinding{0}, renderbufferBinding{0}, maxDrawBuffers{0}, maxColorAttachments{0}, maxRenderbufferSize{0}, maxSamples{0},
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
, maxDualSourceDrawBuffers(0) maxDualSourceDrawBuffers{0},
#endif #endif
viewport{DisengagedViewport}
{ {
/* Create implementation */ /* Create implementation */
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
@ -236,7 +239,7 @@ FramebufferState::FramebufferState(Context& context, std::vector<std::string>& e
void FramebufferState::reset() { void FramebufferState::reset() {
readBinding = drawBinding = renderbufferBinding = State::DisengagedBinding; readBinding = drawBinding = renderbufferBinding = State::DisengagedBinding;
viewport = {}; viewport = DisengagedViewport;
} }
}} }}

2
src/Magnum/Implementation/FramebufferState.h

@ -33,6 +33,8 @@
namespace Magnum { namespace Implementation { namespace Magnum { namespace Implementation {
struct FramebufferState { struct FramebufferState {
constexpr static const Range2Di DisengagedViewport{};
explicit FramebufferState(Context& context, std::vector<std::string>& extensions); explicit FramebufferState(Context& context, std::vector<std::string>& extensions);
void reset(); void reset();

Loading…
Cancel
Save