diff options
author | Joe Crayne <joe@jerkface.net> | 2019-04-29 22:40:53 -0400 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2019-04-29 22:40:53 -0400 |
commit | c9d1da96a78c78f18ba0d995d6a0376a00452b80 (patch) | |
tree | fd31d856cdb884c011e8d302790e5a601278b7c8 /MeshSketch.hs | |
parent | a1cf451ede392fae4a7c594f18b699128c6875fe (diff) |
WIP: Skybox for MeshSketch rework.
Diffstat (limited to 'MeshSketch.hs')
-rw-r--r-- | MeshSketch.hs | 25 |
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 | |||
30 | import LambdaCube.GL as LC | 30 | import LambdaCube.GL as LC |
31 | import LambdaCube.IR as LC | 31 | import LambdaCube.IR as LC |
32 | import LambdaCube.Gtk | 32 | import LambdaCube.Gtk |
33 | import LambdaCube.GL.Data (uploadCubeMapToGPU) | ||
33 | 34 | ||
35 | import CubeMap | ||
34 | import GLWidget (nullableContext, withCurrentGL) | 36 | import GLWidget (nullableContext, withCurrentGL) |
35 | import LambdaCube.GL.HMatrix | 37 | import LambdaCube.GL.HMatrix |
36 | import LambdaCubeWidget (loadPipeline,DynamicPipeline(..)) | 38 | import 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 | ||
50 | data Camera = Camera | 55 | data 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 |