summaryrefslogtreecommitdiff
path: root/MeshSketch.hs
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-04-29 22:40:53 -0400
committerJoe Crayne <joe@jerkface.net>2019-04-29 22:40:53 -0400
commitc9d1da96a78c78f18ba0d995d6a0376a00452b80 (patch)
treefd31d856cdb884c011e8d302790e5a601278b7c8 /MeshSketch.hs
parenta1cf451ede392fae4a7c594f18b699128c6875fe (diff)
WIP: Skybox for MeshSketch rework.
Diffstat (limited to 'MeshSketch.hs')
-rw-r--r--MeshSketch.hs25
1 files changed, 23 insertions, 2 deletions
diff --git a/MeshSketch.hs b/MeshSketch.hs
index 1408710..288488b 100644
--- a/MeshSketch.hs
+++ b/MeshSketch.hs
@@ -30,7 +30,9 @@ import Control.Exception
30import LambdaCube.GL as LC 30import LambdaCube.GL as LC
31import LambdaCube.IR as LC 31import LambdaCube.IR as LC
32import LambdaCube.Gtk 32import LambdaCube.Gtk
33import LambdaCube.GL.Data (uploadCubeMapToGPU)
33 34
35import CubeMap
34import GLWidget (nullableContext, withCurrentGL) 36import GLWidget (nullableContext, withCurrentGL)
35import LambdaCube.GL.HMatrix 37import LambdaCube.GL.HMatrix
36import LambdaCubeWidget (loadPipeline,DynamicPipeline(..)) 38import LambdaCubeWidget (loadPipeline,DynamicPipeline(..))
@@ -45,6 +47,9 @@ data State = State
45 { stAnimator :: Animator 47 { stAnimator :: Animator
46 , stCamera :: IORef Camera 48 , stCamera :: IORef Camera
47 , stFullscreen :: IO () 49 , stFullscreen :: IO ()
50 , stSkyboxes :: Skyboxes
51 , stSkybox :: IORef Int
52 , stSkyTexture :: IORef TextureData
48 } 53 }
49 54
50data Camera = Camera 55data Camera = Camera
@@ -122,11 +127,23 @@ uploadState obj glarea storage = do
122 Just pwidget <- get w #parent 127 Just pwidget <- get w #parent
123 Just parent <- get pwidget #window 128 Just parent <- get pwidget #window
124 toggle <- mkFullscreenToggle parent 129 toggle <- mkFullscreenToggle parent
130 skyboxes <- loadSkyboxes
131 skybox <- newIORef 0
132 Right ts <- skyboxLoad skyboxes 0
133 skybox_id <- uploadCubeMapToGPU ts
134 -- LC.updateUniforms storage $ do
135 -- "CubeMap" @= return skybox_id
136 skytex <- newIORef skybox_id
137 mi <- LC.uploadMeshToGPU cubeMesh
138 -- LC.addMeshToObjectArray storage "SkyCube" [] mi -- TODO
125 139
126 let st = State 140 let st = State
127 { stAnimator = tm 141 { stAnimator = tm
128 , stCamera = cam 142 , stCamera = cam
129 , stFullscreen = toggle 143 , stFullscreen = toggle
144 , stSkyboxes = skyboxes
145 , stSkybox = skybox
146 , stSkyTexture = skytex
130 } 147 }
131 _ <- addAnimation tm (whirlingCamera st) 148 _ <- addAnimation tm (whirlingCamera st)
132 149
@@ -291,13 +308,17 @@ onEvent w realized ev = do
291 kev <- get ev #key 308 kev <- get ev #key
292 val <- get kev #keyval <&> \k -> if k > 0x5A then k - 0x20 else k 309 val <- get kev #keyval <&> \k -> if k > 0x5A then k - 0x20 else k
293 case val of 310 case val of
294 {-
295 KEY_N -> do 311 KEY_N -> do
296 modifyIORef' (stSkybox st) $ \n -> (n + 1) `mod` (skyboxCount $ stSkyboxes st) 312 modifyIORef' (stSkybox st) $ \n -> (n + 1) `mod` (skyboxCount $ stSkyboxes st)
297 idx <- readIORef (stSkybox st) 313 idx <- readIORef (stSkybox st)
314 Right ts <- skyboxLoad (stSkyboxes st) idx
315 disposeTexture =<< readIORef (stSkyTexture st)
316 skybox_id <- uploadCubeMapToGPU ts
317 -- LC.updateUniforms storage $ do
318 -- "CubeMap" @= return skybox_id
319 writeIORef (stSkyTexture st) skybox_id
298 put (skyboxNames (stSkyboxes st) !! idx) 320 put (skyboxNames (stSkyboxes st) !! idx)
299 return () 321 return ()
300 -}
301 KEY_F -> do 322 KEY_F -> do
302 put 'F' 323 put 'F'
303 stFullscreen st 324 stFullscreen st