summaryrefslogtreecommitdiff
path: root/GtkHello.hs
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-04-07 03:36:13 -0400
committerJoe Crayne <joe@jerkface.net>2019-04-07 03:36:13 -0400
commit38e36f265d12c5a18dabc02248943ad43ee18caf (patch)
tree39a9e78ce2d455a440aff711df8cc75f94fe7cbc /GtkHello.hs
parentf54d8b599274d8259ebc634c0907658ff52178fe (diff)
Experimenting...
Diffstat (limited to 'GtkHello.hs')
-rw-r--r--GtkHello.hs39
1 files changed, 31 insertions, 8 deletions
diff --git a/GtkHello.hs b/GtkHello.hs
index bf83378..43de1d2 100644
--- a/GtkHello.hs
+++ b/GtkHello.hs
@@ -13,6 +13,7 @@ import qualified Data.Vector as V
13 13
14import LambdaCube.GL as LambdaCubeGL -- renderer 14import LambdaCube.GL as LambdaCubeGL -- renderer
15import LambdaCube.GL.Mesh as LambdaCubeGL 15import LambdaCube.GL.Mesh as LambdaCubeGL
16import LambdaCube.IR
16 17
17import Codec.Picture as Juicy 18import Codec.Picture as Juicy
18 19
@@ -23,17 +24,18 @@ type State = ()
23 24
24data Event = Closed | Ignored 25data Event = Closed | Ignored
25 26
26view' :: State -> AppView Gtk.Window Event 27view' :: Constants -> State -> AppView Gtk.Window Event
27view' _ = bin 28view' storage _ = bin
28 Gtk.Window 29 Gtk.Window
29 [ #title := "LambdaCube 3D DSL Hello World" 30 [ #title := "LambdaCube 3D DSL Hello World"
30 , on #deleteEvent $ {- GI.Gdk.Unions.Event.Event -> (Bool, Event) -} \_ -> (True,Closed) 31 , on #deleteEvent $ {- GI.Gdk.Unions.Event.Event -> (Bool, Event) -} \_ -> (True,Closed)
31 ] 32 ]
32 $ widget Gtk.GLArea [onM #render render] 33 $ widget Gtk.GLArea [onM #render $ render storage]
33 34
34 35
35update' :: State -> Event -> Transition State Event 36update' :: State -> Event -> Transition State Event
36update' _ Closed = Exit 37update' _ Closed = Exit
38update' _ _ = Transition () (return Nothing)
37 39
38-- geometry data: triangles 40-- geometry data: triangles
39triangleA :: LambdaCubeGL.Mesh 41triangleA :: LambdaCubeGL.Mesh
@@ -54,9 +56,24 @@ triangleB = Mesh
54 , mPrimitive = P_Triangles 56 , mPrimitive = P_Triangles
55 } 57 }
56 58
57render :: GLContext -> Gtk.GLArea -> IO (Bool, Event) 59data Constants = Constants
58render _ _ = do 60 { cStorage :: GLStorage
61 , cPipeline :: Pipeline
62 }
63
64
65render :: Constants -> GLContext -> Gtk.GLArea -> IO (Bool, Event)
66render c _ _ = do
59 putStrLn "render!" 67 putStrLn "render!"
68
69 renderer <- LambdaCubeGL.allocRenderer (cPipeline c)
70
71 {-
72 -- upload geometry to GPU and add to pipeline input
73 LambdaCubeGL.uploadMeshToGPU triangleA >>= LambdaCubeGL.addMeshToObjectArray storage "objects" []
74 LambdaCubeGL.uploadMeshToGPU triangleB >>= LambdaCubeGL.addMeshToObjectArray storage "objects" []
75 -}
76
60 return (True,Ignored) 77 return (True,Ignored)
61 78
62main :: IO () 79main :: IO ()
@@ -82,12 +99,18 @@ main = do
82 Right img <- Juicy.readImage "logo.png" 99 Right img <- Juicy.readImage "logo.png"
83 textureData <- LambdaCubeGL.uploadTexture2DToGPU img 100 textureData <- LambdaCubeGL.uploadTexture2DToGPU img
84 101
85 -- allocate GL pipeline 102 -- Disabled, triggers shader compilation.
86 renderer <- LambdaCubeGL.allocRenderer pipelineDesc 103 -- This triggers lots of garbage to be dumped to the terminal and apparently
104 -- never returns to display the gtk window.
105 let _ = do
106 -- allocate GL pipeline
107 renderer <- LambdaCubeGL.allocRenderer pipelineDesc
108 return ()
87 109
110 putStrLn "Starting Gtk window!"
88 run App 111 run App
89 -- :: App Gtk.Window State Event 112 -- :: App Gtk.Window State Event
90 { view = view' 113 { view = view' Constants { cStorage = storage, cPipeline = pipelineDesc }
91 , update = update' 114 , update = update'
92 , inputs = [] 115 , inputs = []
93 , initialState = () 116 , initialState = ()