diff --git a/src/pew/renderpass/renderpass.hpp b/src/pew/renderpass/renderpass.hpp
index d6d836e79df91ef3b7ca8c45d75a219bf01a86fa..43a54665b0535975a49b846d167eae5b3338d491 100644
--- a/src/pew/renderpass/renderpass.hpp
+++ b/src/pew/renderpass/renderpass.hpp
@@ -94,7 +94,7 @@ namespace pew {
         RenderPassBuffers       buffers;
 
 #if !defined(PEW_USE_THREADS)
-        std::function<void()> pixelUpdateFun;
+        std::function<bool()> pixelUpdateFun;
 #endif
 
         public:
@@ -133,7 +133,7 @@ namespace pew {
 
 #if !defined(PEW_USE_THREADS)
         RenderPass&
-        setPixelUpdateFunction(const std::function<void()>& fun) {
+        setPixelUpdateFunction(const std::function<bool()>& fun) {
             pixelUpdateFun = fun;
             return *this;
         }
diff --git a/src/pew/scene/scene.cpp b/src/pew/scene/scene.cpp
index 668511dd4989049e798e0a0eee5362c9b63d9cd1..15df4f3715236940a79d88aff6d4f56994dae64d 100644
--- a/src/pew/scene/scene.cpp
+++ b/src/pew/scene/scene.cpp
@@ -43,6 +43,7 @@ namespace pew {
         renderPass.setPixelUpdateFunction([&] {
             window.handleInput();
             window.drawFrame();
+            return window.getShouldClose();
         });
         
         #if defined(__EMSCRIPTEN__)
diff --git a/src/pew/window/window.hpp b/src/pew/window/window.hpp
index 50d95be2be6740a0bea0adbb4ffab6bc7ae1881e..20b95acb9265deb45f430469dc1c5155526fcbd6 100644
--- a/src/pew/window/window.hpp
+++ b/src/pew/window/window.hpp
@@ -155,6 +155,11 @@ namespace pew {
             shouldClose = true;
         }
 
+        auto
+        getShouldClose() const noexcept {
+            return shouldClose;
+        }
+
         void
         handleInput() {
             SDL_Event event;