diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.11
+
+- Updated luminance dependency to include the latest version and break compatibility with older
+  versions.
+
 ## 0.10
 
 - Updated luminance dependency to include the latest version and break compatibility with older
diff --git a/luminance-samples.cabal b/luminance-samples.cabal
--- a/luminance-samples.cabal
+++ b/luminance-samples.cabal
@@ -1,5 +1,5 @@
 name:                luminance-samples
-version:             0.10
+version:             0.11
 synopsis:            Luminance samples
 description:         Luminance samples used as tutorial help
 homepage:            https://github.com/phaazon/luminance-samples
@@ -31,7 +31,7 @@
                      , FlexibleContexts
 
   build-depends:       base         >= 4.8  && < 4.9
-                     , luminance    >= 0.10 && < 0.11
+                     , luminance    >= 0.11 && < 0.12
                      , GLFW-b       >= 1.4  && < 1.5
                      , mtl          >= 2.2  && < 2.3
                      , resourcet    >= 1.1  && < 1.2
@@ -53,7 +53,7 @@
                      , ScopedTypeVariables
 
   build-depends:       base         >= 4.8  && < 4.9
-                     , luminance    >= 0.10 && < 0.11
+                     , luminance    >= 0.11 && < 0.12
                      , GLFW-b       >= 1.4  && < 1.5
                      , mtl          >= 2.2  && < 2.3
                      , resourcet    >= 1.1  && < 1.2
@@ -76,7 +76,7 @@
 
   build-depends:       base          >= 4.8  && < 4.9
                      , contravariant >= 1.3  && < 1.5
-                     , luminance     >= 0.10 && < 0.11
+                     , luminance     >= 0.11 && < 0.12
                      , GLFW-b        >= 1.4  && < 1.5
                      , mtl           >= 2.2  && < 2.3
                      , resourcet     >= 1.1  && < 1.2
@@ -99,7 +99,7 @@
 
   build-depends:       base          >= 4.8  && < 4.9
                      , contravariant >= 1.3  && < 1.5
-                     , luminance     >= 0.10 && < 0.11
+                     , luminance     >= 0.11 && < 0.12
                      , GLFW-b        >= 1.4  && < 1.5
                      , mtl           >= 2.2  && < 2.3
                      , resourcet     >= 1.1  && < 1.2
@@ -123,7 +123,7 @@
   build-depends:       base          >= 4.8  && < 4.9
                      , contravariant >= 1.3  && < 1.5
                      , JuicyPixels   >= 3.2  && < 3.4
-                     , luminance     >= 0.10 && < 0.11
+                     , luminance     >= 0.11 && < 0.12
                      , GLFW-b        >= 1.4  && < 1.5
                      , mtl           >= 2.2  && < 2.3
                      , resourcet     >= 1.1  && < 1.2
@@ -146,7 +146,7 @@
 
   build-depends:       base          >= 4.8  && < 4.9
                      , contravariant >= 1.3  && < 1.5
-                     , luminance     >= 0.10 && < 0.11
+                     , luminance     >= 0.11 && < 0.12
                      , GLFW-b        >= 1.4  && < 1.5
                      , mtl           >= 2.2  && < 2.3
                      , resourcet     >= 1.1  && < 1.2
@@ -171,7 +171,7 @@
   build-depends:       base          >= 4.8  && < 4.9
                      , contravariant >= 1.3  && < 1.5
                      , linear        >= 1.20 && < 1.21
-                     , luminance     >= 0.10 && < 0.11
+                     , luminance     >= 0.11 && < 0.12
                      , GLFW-b        >= 1.4  && < 1.5
                      , mtl           >= 2.2  && < 2.3
                      , resourcet     >= 1.1  && < 1.2
diff --git a/src/Blending.hs b/src/Blending.hs
--- a/src/Blending.hs
+++ b/src/Blending.hs
@@ -1,5 +1,4 @@
 import Common
-import Data.Foldable ( for_ )
 import Graphics.Luminance
 
 main :: IO ()
@@ -12,12 +11,9 @@
     offsetU <- uni (UniformName "offset")
     pure (colorU,offsetU)
   loop $ do
-    gpuRegion . newFrame defaultFramebuffer . newShading (Some program) $ do
-      for_ (zip colors offsets) $ \(color,offset) -> do
-        updateUniforms program $ \(colorU,offsetU) ->
-             colorU .= color
-          <> offsetU .= offset
-        drawGeometry (renderCmd blending False triangle )
+    let cmd color offset =
+          updateAndDraw (\(colorU,offsetU) -> (colorU .= color <> offsetU .= offset)) (renderCmd blending False triangle)
+    _ <- draw $ defaultFrameCmd [ShadingCmd program mempty $ zipWith cmd colors offsets]
     endFrame window
 
 colors :: [(Float,Float,Float)]
diff --git a/src/Blit.hs b/src/Blit.hs
--- a/src/Blit.hs
+++ b/src/Blit.hs
@@ -9,8 +9,7 @@
   program <- createProgram_ [vs,fs]
   fb :: Framebuffer RW RGBA32F () <- createFramebuffer windowW windowH 1
   loop $ do
-    gpuRegion . newFrame fb . newShading (Some program) $ do
-      drawGeometry (stdRenderCmd triangle)
+    _ <- draw $ FrameCmd fb [ShadingCmd program mempty [pureDraw (stdRenderCmd triangle)]]
     framebufferBlit fb defaultFramebuffer 0 0 windowW windowH 0 0 windowW windowH BlitColor Linear
     endFrame window
 
diff --git a/src/DepthTest.hs b/src/DepthTest.hs
--- a/src/DepthTest.hs
+++ b/src/DepthTest.hs
@@ -1,5 +1,4 @@
 import Common
-import Data.Foldable ( for_ )
 import Graphics.Luminance
 
 main :: IO ()
@@ -12,12 +11,8 @@
     offsetU <- uni (UniformName "offset")
     pure (colorU,offsetU)
   loop $ do
-    gpuRegion . newFrame defaultFramebuffer . newShading (Some program) $ do
-      for_ (zip colors offsets) $ \(color,offset) -> do
-        updateUniforms program $ \(colorU,offsetU) ->
-             colorU .= color
-          <> offsetU .= offset
-        drawGeometry (renderCmd Nothing True triangle )
+    let cmd color offset = updateAndDraw (\(colorU,offsetU) -> colorU .= color <> offsetU .= offset) (stdRenderCmd triangle)
+    _ <- draw $ defaultFrameCmd [ShadingCmd program mempty (zipWith cmd colors offsets)]
     endFrame window
 
 colors :: [(Float,Float,Float)]
diff --git a/src/HelloWorld.hs b/src/HelloWorld.hs
--- a/src/HelloWorld.hs
+++ b/src/HelloWorld.hs
@@ -6,8 +6,7 @@
   triangle <- createGeometry vertices Nothing Triangle
   program <- sequenceA [createStage VertexShader vsSource,createStage FragmentShader fsSource] >>= createProgram_
   loop $ do
-    gpuRegion . newFrame defaultFramebuffer . newShading (Some program) $
-      drawGeometry (stdRenderCmd triangle)
+    _ <- draw $ defaultFrameCmd [ShadingCmd program mempty [pureDraw (stdRenderCmd triangle)]]
     endFrame window
 
 vertices :: [V 2 Float]
diff --git a/src/HelloWorldUniform.hs b/src/HelloWorldUniform.hs
--- a/src/HelloWorldUniform.hs
+++ b/src/HelloWorldUniform.hs
@@ -8,10 +8,9 @@
   fs <- createStage FragmentShader fsSource
   program <- createProgram [vs,fs] $ \uni ->
     uni (UniformName "colors")
+  updateUniforms program (.= colors)
   loop $ do
-    gpuRegion . newFrame defaultFramebuffer . newShading (Some program) $ do
-      updateUniforms program $ (.= colors)
-      drawGeometry (stdRenderCmd triangle)
+    _ <- draw $ defaultFrameCmd [ShadingCmd program mempty [pureDraw $ stdRenderCmd triangle]]
     endFrame window
 
 colors :: [(Float,Float,Float)]
diff --git a/src/Texture.hs b/src/Texture.hs
--- a/src/Texture.hs
+++ b/src/Texture.hs
@@ -17,10 +17,9 @@
   vs <- createStage VertexShader vsSource
   fs <- createStage FragmentShader fsSource
   program <- createProgram [vs,fs] $ \uni -> uni (UniformName "srcTex")
-  updateUniforms program $ (.= tex)
+  updateUniforms program (.= tex)
   loop $ do
-    gpuRegion . newFrame defaultFramebuffer . newShading (Some program) $ do
-      drawGeometry (stdRenderCmd quad)
+    _ <- draw $ defaultFrameCmd [ShadingCmd program mempty [pureDraw (stdRenderCmd quad)]]
     endFrame window
 
 vertices :: [V 2 Float]
diff --git a/src/UBO.hs b/src/UBO.hs
--- a/src/UBO.hs
+++ b/src/UBO.hs
@@ -11,10 +11,9 @@
   colorBuffer :: Buffer RW (UB Color) <- createBuffer (newRegion 3)
   writeWhole colorBuffer (map UB colors)
   program <- createProgram [vs,fs] $ \uni -> uni (UniformBlockName "Colors")
-  updateUniforms program $ (.= colorBuffer)
+  updateUniforms program (.= colorBuffer)
   loop $ do
-    gpuRegion . newFrame defaultFramebuffer . newShading (Some program) $
-      drawGeometry (stdRenderCmd triangle)
+    _ <- draw $ defaultFrameCmd [ShadingCmd program mempty [pureDraw (stdRenderCmd triangle)]]
     endFrame window
 
 data Color = Color {
