Add 'dotscape/' from commit 'f306501a68a51b634e895c5fdac70788ae899d75'
git-subtree-dir: dotscape git-subtree-mainline:6b91d64fc3git-subtree-split:f306501a68
This commit is contained in:
188
dotscape/imperative-shell/draw-thread.sml
Normal file
188
dotscape/imperative-shell/draw-thread.sml
Normal file
@@ -0,0 +1,188 @@
|
||||
structure DrawThread =
|
||||
struct
|
||||
open CML
|
||||
open DrawMessage
|
||||
|
||||
fun run
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, drawGraphLength
|
||||
, dotDrawObject
|
||||
, dotDrawLength
|
||||
, squareDrawObject
|
||||
, squareDrawLength
|
||||
, modalTextDrawObject
|
||||
, modalTextDrawLength
|
||||
) =
|
||||
if not (Glfw.windowShouldClose window) then
|
||||
case Mailbox.recvPoll drawMailbox of
|
||||
NONE =>
|
||||
let
|
||||
val _ = Gles3.clearColor (1.0, 1.0, 1.0, 1.0)
|
||||
val _ = Gles3.clear ()
|
||||
|
||||
val _ = AppDraw.drawGraphLines (graphDrawObject, drawGraphLength)
|
||||
val _ = AppDraw.drawSquares (squareDrawObject, squareDrawLength)
|
||||
val _ = AppDraw.drawDot (dotDrawObject, dotDrawLength)
|
||||
val _ =
|
||||
AppDraw.drawModalText (modalTextDrawObject, modalTextDrawLength)
|
||||
|
||||
val _ = Glfw.swapBuffers window
|
||||
val _ = Glfw.pollEvents ()
|
||||
in
|
||||
run
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, drawGraphLength
|
||||
, dotDrawObject
|
||||
, dotDrawLength
|
||||
, squareDrawObject
|
||||
, squareDrawLength
|
||||
, modalTextDrawObject
|
||||
, modalTextDrawLength
|
||||
)
|
||||
end
|
||||
| SOME drawMsg =>
|
||||
(case drawMsg of
|
||||
DRAW_DOT vec =>
|
||||
let
|
||||
val _ = AppDraw.uploadDotVector (dotDrawObject, vec)
|
||||
val dotDrawLength = Vector.length vec div 5
|
||||
in
|
||||
run
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, drawGraphLength
|
||||
, dotDrawObject
|
||||
, dotDrawLength
|
||||
, squareDrawObject
|
||||
, squareDrawLength
|
||||
, modalTextDrawObject
|
||||
, modalTextDrawLength
|
||||
)
|
||||
end
|
||||
| DRAW_SQUARES_AND_RESET_DOTS squareVec =>
|
||||
let
|
||||
val _ =
|
||||
AppDraw.uploadSquaresVector (squareDrawObject, squareVec)
|
||||
val squareDrawLength = Vector.length squareVec div 5
|
||||
(* dots are reset by setting dotDrawLength to 0 *)
|
||||
in
|
||||
run
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, drawGraphLength
|
||||
, dotDrawObject
|
||||
, 0
|
||||
, squareDrawObject
|
||||
, squareDrawLength
|
||||
, modalTextDrawObject
|
||||
, modalTextDrawLength
|
||||
)
|
||||
end
|
||||
| DRAW_SQUARES_AND_DOTS {squares = squareVec, dots = dotsVec} =>
|
||||
let
|
||||
val _ =
|
||||
AppDraw.uploadSquaresVector (squareDrawObject, squareVec)
|
||||
val squareDrawLength = Vector.length squareVec div 5
|
||||
|
||||
val _ = AppDraw.uploadDotVector (dotDrawObject, dotsVec)
|
||||
val dotDrawLength = Vector.length dotsVec div 5
|
||||
in
|
||||
run
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, drawGraphLength
|
||||
, dotDrawObject
|
||||
, dotDrawLength
|
||||
, squareDrawObject
|
||||
, squareDrawLength
|
||||
, modalTextDrawObject
|
||||
, modalTextDrawLength
|
||||
)
|
||||
end
|
||||
| CLEAR_DOTS =>
|
||||
let
|
||||
val dotDrawLength = 0
|
||||
in
|
||||
run
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, drawGraphLength
|
||||
, dotDrawObject
|
||||
, dotDrawLength
|
||||
, squareDrawObject
|
||||
, squareDrawLength
|
||||
, modalTextDrawObject
|
||||
, modalTextDrawLength
|
||||
)
|
||||
end
|
||||
| RESIZE_SQUARES_DOTS_AND_GRAPH {squares, graphLines, dots} =>
|
||||
let
|
||||
val _ = AppDraw.uploadSquaresVector (squareDrawObject, squares)
|
||||
val squareDrawLength = Vector.length squares div 5
|
||||
|
||||
val _ = AppDraw.uploadGraphLines (graphDrawObject, graphLines)
|
||||
val drawGraphLength = Vector.length graphLines div 2
|
||||
|
||||
val _ = AppDraw.uploadDotVector (dotDrawObject, dots)
|
||||
val dotDrawLength = Vector.length dots div 5
|
||||
in
|
||||
run
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, drawGraphLength
|
||||
, dotDrawObject
|
||||
, dotDrawLength
|
||||
, squareDrawObject
|
||||
, squareDrawLength
|
||||
, modalTextDrawObject
|
||||
, modalTextDrawLength
|
||||
)
|
||||
end
|
||||
| DRAW_GRAPH graphLines =>
|
||||
let
|
||||
val _ = AppDraw.uploadGraphLines (graphDrawObject, graphLines)
|
||||
val drawGraphLength = Vector.length graphLines div 2
|
||||
in
|
||||
run
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, drawGraphLength
|
||||
, dotDrawObject
|
||||
, dotDrawLength
|
||||
, squareDrawObject
|
||||
, squareDrawLength
|
||||
, modalTextDrawObject
|
||||
, modalTextDrawLength
|
||||
)
|
||||
end
|
||||
| DRAW_MODAL_TEXT vec =>
|
||||
let
|
||||
val _ = AppDraw.uploadModalText (modalTextDrawObject, vec)
|
||||
val modalTextDrawLength = Vector.length vec div 5
|
||||
in
|
||||
run
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, drawGraphLength
|
||||
, dotDrawObject
|
||||
, dotDrawLength
|
||||
, squareDrawObject
|
||||
, squareDrawLength
|
||||
, modalTextDrawObject
|
||||
, modalTextDrawLength
|
||||
)
|
||||
end)
|
||||
else
|
||||
Glfw.terminate ()
|
||||
end
|
||||
Reference in New Issue
Block a user