summaryrefslogtreecommitdiff
path: root/LambdaHello.hs
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-04-13 00:51:51 -0400
committerJoe Crayne <joe@jerkface.net>2019-04-13 00:51:51 -0400
commit3899b660b11bf1d3179965ac92a039b8d449306f (patch)
tree9337ae45c733e0dd7237acdc4fd6353a515a20aa /LambdaHello.hs
parent705842f6dbbec605d26cd2d7a167f85d18e8275f (diff)
Switched away from gtk-declarative.
Diffstat (limited to 'LambdaHello.hs')
-rw-r--r--LambdaHello.hs20
1 files changed, 1 insertions, 19 deletions
diff --git a/LambdaHello.hs b/LambdaHello.hs
index 78d4f0d..5615ca8 100644
--- a/LambdaHello.hs
+++ b/LambdaHello.hs
@@ -22,9 +22,7 @@ import qualified Data.Vector as V
22-- import qualified Backend as RF 22-- import qualified Backend as RF
23import LambdaCube.GL as RF 23import LambdaCube.GL as RF
24import LambdaCube.GL.Type 24import LambdaCube.GL.Type
25 25import LambdaCube.Gtk
26import Control.Monad.IO.Class
27import qualified Unsafe.Coerce
28 26
29data State = State 27data State = State
30 { stConfig :: Config 28 { stConfig :: Config
@@ -47,22 +45,6 @@ initState = do
47 } 45 }
48 46
49 47
50-- | LambdaCube.GL assumes we are rendering to the default framebuffer #0 but
51-- Gtk.GLArea actually uses an unpredictable framebuffer object target. As a
52-- workaround, we read the current framebuffer target and patch up the render
53-- commands to use it instead of 0.
54fixupRenderTarget :: MonadIO m => GLRenderer -> m GLRenderer
55fixupRenderTarget r = do
56 fbo0 <- GL.get $ GL.bindFramebuffer GL.DrawFramebuffer
57 let fbo = Unsafe.Coerce.unsafeCoerce fbo0 :: GL.GLuint -- XXX: Is there a better way to get this?
58 setFBO rt | framebufferObject rt == 0 = rt { framebufferObject = fbo }
59 | otherwise = rt
60 updateDC dc = dc { glRenderTarget = rt' } where rt' = setFBO (glRenderTarget dc)
61 update (GLClearRenderTarget rt imgs) = GLClearRenderTarget (setFBO rt) imgs
62 update (GLRenderSlot dc s p) = GLRenderSlot (updateDC dc) s p
63 update (GLRenderStream dc s p) = GLRenderStream (updateDC dc) s p
64 return r { glCommands = map update (glCommands r) }
65
66render :: State -> GLArea -> GLContext -> IO Bool 48render :: State -> GLArea -> GLContext -> IO Bool
67render st w gl = do 49render st w gl = do
68 mr <- tryTakeMVar (stRealized st) 50 mr <- tryTakeMVar (stRealized st)