diff options
author | Joe Crayne <joe@jerkface.net> | 2019-04-07 03:36:13 -0400 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2019-04-07 03:36:13 -0400 |
commit | 38e36f265d12c5a18dabc02248943ad43ee18caf (patch) | |
tree | 39a9e78ce2d455a440aff711df8cc75f94fe7cbc /GtkHello.hs | |
parent | f54d8b599274d8259ebc634c0907658ff52178fe (diff) |
Experimenting...
Diffstat (limited to 'GtkHello.hs')
-rw-r--r-- | GtkHello.hs | 39 |
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 | ||
14 | import LambdaCube.GL as LambdaCubeGL -- renderer | 14 | import LambdaCube.GL as LambdaCubeGL -- renderer |
15 | import LambdaCube.GL.Mesh as LambdaCubeGL | 15 | import LambdaCube.GL.Mesh as LambdaCubeGL |
16 | import LambdaCube.IR | ||
16 | 17 | ||
17 | import Codec.Picture as Juicy | 18 | import Codec.Picture as Juicy |
18 | 19 | ||
@@ -23,17 +24,18 @@ type State = () | |||
23 | 24 | ||
24 | data Event = Closed | Ignored | 25 | data Event = Closed | Ignored |
25 | 26 | ||
26 | view' :: State -> AppView Gtk.Window Event | 27 | view' :: Constants -> State -> AppView Gtk.Window Event |
27 | view' _ = bin | 28 | view' 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 | ||
35 | update' :: State -> Event -> Transition State Event | 36 | update' :: State -> Event -> Transition State Event |
36 | update' _ Closed = Exit | 37 | update' _ Closed = Exit |
38 | update' _ _ = Transition () (return Nothing) | ||
37 | 39 | ||
38 | -- geometry data: triangles | 40 | -- geometry data: triangles |
39 | triangleA :: LambdaCubeGL.Mesh | 41 | triangleA :: LambdaCubeGL.Mesh |
@@ -54,9 +56,24 @@ triangleB = Mesh | |||
54 | , mPrimitive = P_Triangles | 56 | , mPrimitive = P_Triangles |
55 | } | 57 | } |
56 | 58 | ||
57 | render :: GLContext -> Gtk.GLArea -> IO (Bool, Event) | 59 | data Constants = Constants |
58 | render _ _ = do | 60 | { cStorage :: GLStorage |
61 | , cPipeline :: Pipeline | ||
62 | } | ||
63 | |||
64 | |||
65 | render :: Constants -> GLContext -> Gtk.GLArea -> IO (Bool, Event) | ||
66 | render 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 | ||
62 | main :: IO () | 79 | main :: 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 = () |