From 371700097b527166c8bab68149fcd4b96dcb60b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 10 Jan 2015 13:47:04 +0100 Subject: [PATCH] Allow method chaining on *Framebuffer::clear(). In the future, when I get to implement proper DSA clearing, this won't change currently bound framebuffer and thus it might be useful to be able to call bind() right after, e.g.: framebuffer.clear(FramebufferClear::Color) .bind(FramebufferTarget::ReadDraw); --- src/Magnum/AbstractFramebuffer.cpp | 4 +++- src/Magnum/AbstractFramebuffer.h | 3 ++- src/Magnum/DefaultFramebuffer.h | 4 ++++ src/Magnum/Framebuffer.h | 4 ++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Magnum/AbstractFramebuffer.cpp b/src/Magnum/AbstractFramebuffer.cpp index 04016645b..eef8e6a48 100644 --- a/src/Magnum/AbstractFramebuffer.cpp +++ b/src/Magnum/AbstractFramebuffer.cpp @@ -221,13 +221,15 @@ void AbstractFramebuffer::setViewportInternal() { glViewport(_viewport.left(), _viewport.bottom(), _viewport.sizeX(), _viewport.sizeY()); } -void AbstractFramebuffer::clear(FramebufferClearMask mask) { +AbstractFramebuffer& AbstractFramebuffer::clear(FramebufferClearMask mask) { #ifndef MAGNUM_TARGET_GLES2 bindInternal(FramebufferTarget::Draw); #else bindInternal(Context::current()->state().framebuffer->drawTarget); #endif glClear(GLbitfield(mask)); + + return *this; } void AbstractFramebuffer::read(const Range2Di& rectangle, Image2D& image) { diff --git a/src/Magnum/AbstractFramebuffer.h b/src/Magnum/AbstractFramebuffer.h index 40cc4da39..279283e37 100644 --- a/src/Magnum/AbstractFramebuffer.h +++ b/src/Magnum/AbstractFramebuffer.h @@ -284,6 +284,7 @@ class MAGNUM_EXPORT AbstractFramebuffer { /** * @brief Clear specified buffers in framebuffer * @param mask Which buffers to clear + * @return Reference to self (for method chaining) * * To improve performance you can also use * @ref DefaultFramebuffer::invalidate() / @ref Framebuffer::invalidate() @@ -293,7 +294,7 @@ class MAGNUM_EXPORT AbstractFramebuffer { * @ref Renderer::setClearStencil(), @fn_gl{BindFramebuffer}, * @fn_gl{Clear} */ - void clear(FramebufferClearMask mask); + AbstractFramebuffer& clear(FramebufferClearMask mask); /** * @brief Read block of pixels from framebuffer to image diff --git a/src/Magnum/DefaultFramebuffer.h b/src/Magnum/DefaultFramebuffer.h index 2ded32cfd..55186f18a 100644 --- a/src/Magnum/DefaultFramebuffer.h +++ b/src/Magnum/DefaultFramebuffer.h @@ -432,6 +432,10 @@ class MAGNUM_EXPORT DefaultFramebuffer: public AbstractFramebuffer { AbstractFramebuffer::setViewport(rectangle); return *this; } + DefaultFramebuffer& clear(FramebufferClearMask mask) { + AbstractFramebuffer::clear(mask); + return *this; + } #endif private: diff --git a/src/Magnum/Framebuffer.h b/src/Magnum/Framebuffer.h index b2af3ec11..1b227f0c6 100644 --- a/src/Magnum/Framebuffer.h +++ b/src/Magnum/Framebuffer.h @@ -650,6 +650,10 @@ class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObje AbstractFramebuffer::setViewport(rectangle); return *this; } + Framebuffer& clear(FramebufferClearMask mask) { + AbstractFramebuffer::clear(mask); + return *this; + } #endif private: