restore imperative shell
This commit is contained in:
24
dotscape.mlb
24
dotscape.mlb
@@ -1,5 +1,6 @@
|
||||
$(SML_LIB)/basis/basis.mlb
|
||||
|
||||
(* FUNCTIONAL CORE *)
|
||||
ann
|
||||
"allowVectorExps true"
|
||||
in
|
||||
@@ -23,3 +24,26 @@ functional-core/app-with.sml
|
||||
message-types/input-msg.sml
|
||||
message-types/draw-msg.sml
|
||||
functional-core/app-update.sml
|
||||
|
||||
(* IMPERATIVE SHELL *)
|
||||
$(SML_LIB)/basis/mlton.mlb
|
||||
$(SML_LIB)/cml/cml.mlb
|
||||
|
||||
ann
|
||||
"allowFFI true"
|
||||
in
|
||||
ffi/gles3-import.sml
|
||||
ffi/glfw-import.sml
|
||||
ffi/glfw-input.sml
|
||||
end
|
||||
|
||||
ann
|
||||
"allowVectorExps true"
|
||||
in
|
||||
imperative-shell/constants.sml
|
||||
imperative-shell/app-draw.sml
|
||||
end
|
||||
|
||||
imperative-shell/input-callbacks.sml
|
||||
imperative-shell/event-loop.sml
|
||||
imperative-shell/shell.sml
|
||||
|
||||
@@ -157,6 +157,9 @@ typedef Pointer Objptr;
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
MLLIB_PUBLIC(void mltonMouseMoveCallback (Real32 x0, Real32 x1);)
|
||||
MLLIB_PUBLIC(void mltonMouseClickCallback (Int32 x0, Int32 x1);)
|
||||
MLLIB_PUBLIC(void mltonFramebufferSizeCallback (Int32 x0, Int32 x1);)
|
||||
|
||||
#undef MLLIB_PRIVATE
|
||||
#undef MLLIB_PUBLIC
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
signature APP_INIT =
|
||||
signature APP_INIT =
|
||||
sig
|
||||
val fromWidthAndHeight : int * int -> AppType.app_type
|
||||
val fromWindowWidthAndHeight: int * int -> AppType.app_type
|
||||
end
|
||||
|
||||
structure AppInit :> APP_INIT =
|
||||
@@ -26,7 +26,7 @@ struct
|
||||
}
|
||||
end
|
||||
|
||||
fun fromWidthAndHeight (windowWidth, windowHeight) =
|
||||
fun fromWindowWidthAndHeight (windowWidth, windowHeight) =
|
||||
if windowWidth = windowHeight then
|
||||
helpFromWidthAndHeight
|
||||
(windowWidth, windowHeight, 0, windowWidth, 0, windowHeight)
|
||||
|
||||
@@ -15,13 +15,7 @@ struct
|
||||
end
|
||||
in
|
||||
fun update (inputMailbox, drawMailbox, initial) =
|
||||
loop
|
||||
( inputMailbox
|
||||
, drawMailbox
|
||||
, 0.0
|
||||
, 0.0
|
||||
, AppType.getInitial (Constants.windowWidth, Constants.windowHeight)
|
||||
)
|
||||
loop (inputMailbox, drawMailbox, 0.0, 0.0, initial)
|
||||
end
|
||||
|
||||
fun draw
|
||||
@@ -100,14 +94,11 @@ struct
|
||||
| RESIZE_TRIANGLES_BUTTONS_AND_GRAPH {triangles, graphLines} =>
|
||||
let
|
||||
val _ =
|
||||
AppDraw.uploadTrianglesVector
|
||||
(triangleDrawObject, triangles)
|
||||
AppDraw.uploadTrianglesVector (triangleDrawObject, triangles)
|
||||
val triangleDrawLength = Vector.length triangles div 2
|
||||
(* buttons are reset by setting buttonDrawLength to 0 *)
|
||||
val _ =
|
||||
AppDraw.uploadGraphLines
|
||||
(graphDrawObject, graphLines)
|
||||
val drawGraphLength = Vector.length graphLines div 2
|
||||
(* buttons are reset by setting buttonDrawLength to 0 *)
|
||||
val _ = AppDraw.uploadGraphLines (graphDrawObject, graphLines)
|
||||
val drawGraphLength = Vector.length graphLines div 2
|
||||
in
|
||||
draw
|
||||
( drawMailbox
|
||||
|
||||
@@ -15,12 +15,18 @@ struct
|
||||
val _ = Glfw.makeContextCurrent window
|
||||
val _ = Gles3.loadGlad ()
|
||||
|
||||
val initialModel = AppType.getInitial (Constants.windowWidth, Constants.windowHeight)
|
||||
val initialModel =
|
||||
AppInit.fromWindowWidthAndHeight
|
||||
(Constants.windowWidth, Constants.windowHeight)
|
||||
|
||||
val graphLines = #graphLines initialModel
|
||||
val graphLines =
|
||||
let
|
||||
open AppType
|
||||
in
|
||||
#graphLines initialModel
|
||||
end
|
||||
val graphDrawObject = AppDraw.initGraphLines ()
|
||||
val _ =
|
||||
AppDraw.uploadGraphLines (graphDrawObject, graphLines)
|
||||
val _ = AppDraw.uploadGraphLines (graphDrawObject, graphLines)
|
||||
|
||||
val buttonDrawObject = AppDraw.initButton ()
|
||||
val triangleDrawObject = AppDraw.initTriangles ()
|
||||
@@ -30,8 +36,8 @@ struct
|
||||
|
||||
val _ = CML.spawn (fn () =>
|
||||
InputCallbacks.registerCallbacks (window, inputMailbox))
|
||||
val _ = CML.spawn
|
||||
(fn () => EventLoop.update (inputMailbox, drawMailbox, initialModel))
|
||||
val _ = CML.spawn (fn () =>
|
||||
EventLoop.update (inputMailbox, drawMailbox, initialModel))
|
||||
val _ = CML.spawn (fn () =>
|
||||
EventLoop.draw
|
||||
( drawMailbox
|
||||
|
||||
Reference in New Issue
Block a user