Files
sml-projects/dotscape/imperative-shell/draw-thread.sml

189 lines
6.2 KiB
Standard ML
Raw Normal View History

structure DrawThread =
2024-07-31 10:03:30 +01:00
struct
open CML
open DrawMessage
2024-07-31 10:03:30 +01:00
fun run
2024-07-31 22:25:15 +01:00
( drawMailbox
, window
, graphDrawObject
, drawGraphLength
, dotDrawObject
, dotDrawLength
, squareDrawObject
, squareDrawLength
, modalTextDrawObject
, modalTextDrawLength
2024-07-31 22:25:15 +01:00
) =
2024-07-31 10:03:30 +01:00
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 ()
2024-07-31 10:03:30 +01:00
val _ = AppDraw.drawGraphLines (graphDrawObject, drawGraphLength)
val _ = AppDraw.drawSquares (squareDrawObject, squareDrawLength)
val _ = AppDraw.drawDot (dotDrawObject, dotDrawLength)
2024-09-27 10:06:21 +01:00
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
2024-07-31 22:25:15 +01:00
)
end
| DRAW_SQUARES_AND_RESET_DOTS squareVec =>
2024-07-31 22:25:15 +01:00
let
val _ =
AppDraw.uploadSquaresVector (squareDrawObject, squareVec)
val squareDrawLength = Vector.length squareVec div 5
(* dots are reset by setting dotDrawLength to 0 *)
2024-07-31 22:25:15 +01:00
in
run
2024-07-31 22:25:15 +01:00
( drawMailbox
, window
, graphDrawObject
, drawGraphLength
, dotDrawObject
, 0
, squareDrawObject
, squareDrawLength
, modalTextDrawObject
, modalTextDrawLength
)
end
| DRAW_SQUARES_AND_DOTS {squares = squareVec, dots = dotsVec} =>
2024-08-08 21:35:48 +01:00
let
val _ =
AppDraw.uploadSquaresVector (squareDrawObject, squareVec)
val squareDrawLength = Vector.length squareVec div 5
2024-08-08 21:35:48 +01:00
val _ = AppDraw.uploadDotVector (dotDrawObject, dotsVec)
val dotDrawLength = Vector.length dotsVec div 5
2024-08-08 21:35:48 +01:00
in
run
2024-08-08 21:35:48 +01:00
( drawMailbox
, window
, graphDrawObject
, drawGraphLength
, dotDrawObject
, dotDrawLength
, squareDrawObject
, squareDrawLength
, modalTextDrawObject
, modalTextDrawLength
2024-08-08 21:35:48 +01:00
)
end
| CLEAR_DOTS =>
2024-08-08 21:35:48 +01:00
let
val dotDrawLength = 0
2024-08-08 21:35:48 +01:00
in
run
2024-08-08 21:35:48 +01:00
( drawMailbox
, window
, graphDrawObject
, drawGraphLength
, dotDrawObject
, dotDrawLength
, squareDrawObject
, squareDrawLength
, modalTextDrawObject
, modalTextDrawLength
2024-08-08 21:35:48 +01:00
)
end
| RESIZE_SQUARES_DOTS_AND_GRAPH {squares, graphLines, dots} =>
let
val _ = AppDraw.uploadSquaresVector (squareDrawObject, squares)
val squareDrawLength = Vector.length squares div 5
2024-08-08 05:56:20 +01:00
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
)
2024-09-27 10:06:21 +01:00
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
2024-09-27 10:06:21 +01:00
, modalTextDrawObject
, modalTextDrawLength
)
end)
2024-07-31 10:03:30 +01:00
else
Glfw.terminate ()
end