diff options
Diffstat (limited to 'LambdaHello.hs')
-rw-r--r-- | LambdaHello.hs | 20 |
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 |
23 | import LambdaCube.GL as RF | 23 | import LambdaCube.GL as RF |
24 | import LambdaCube.GL.Type | 24 | import LambdaCube.GL.Type |
25 | 25 | import LambdaCube.Gtk | |
26 | import Control.Monad.IO.Class | ||
27 | import qualified Unsafe.Coerce | ||
28 | 26 | ||
29 | data State = State | 27 | data 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. | ||
54 | fixupRenderTarget :: MonadIO m => GLRenderer -> m GLRenderer | ||
55 | fixupRenderTarget 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 | |||
66 | render :: State -> GLArea -> GLContext -> IO Bool | 48 | render :: State -> GLArea -> GLContext -> IO Bool |
67 | render st w gl = do | 49 | render st w gl = do |
68 | mr <- tryTakeMVar (stRealized st) | 50 | mr <- tryTakeMVar (stRealized st) |