2024-08-28 19:34:47 +01:00
|
|
|
structure DrawThread =
|
2024-07-31 10:03:30 +01:00
|
|
|
struct
|
|
|
|
|
open CML
|
2024-07-31 13:32:22 +01:00
|
|
|
open DrawMessage
|
2024-07-31 10:03:30 +01:00
|
|
|
|
2024-08-28 19:34:47 +01:00
|
|
|
fun run
|
2024-07-31 22:25:15 +01:00
|
|
|
( drawMailbox
|
|
|
|
|
, window
|
|
|
|
|
, graphDrawObject
|
2024-08-03 04:40:53 +01:00
|
|
|
, drawGraphLength
|
2024-08-14 21:24:46 +01:00
|
|
|
, dotDrawObject
|
|
|
|
|
, dotDrawLength
|
2025-07-06 15:14:19 +01:00
|
|
|
, squareDrawObject
|
|
|
|
|
, squareDrawLength
|
2024-09-27 09:08:19 +01:00
|
|
|
, modalTextDrawObject
|
|
|
|
|
, modalTextDrawLength
|
2024-07-31 22:25:15 +01:00
|
|
|
) =
|
2024-07-31 10:03:30 +01:00
|
|
|
if not (Glfw.windowShouldClose window) then
|
2024-07-31 13:32:22 +01:00
|
|
|
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
|
|
|
|
2024-08-03 04:40:53 +01:00
|
|
|
val _ = AppDraw.drawGraphLines (graphDrawObject, drawGraphLength)
|
2025-07-06 15:14:19 +01:00
|
|
|
val _ = AppDraw.drawSquares (squareDrawObject, squareDrawLength)
|
2024-08-14 21:24:46 +01:00
|
|
|
val _ = AppDraw.drawDot (dotDrawObject, dotDrawLength)
|
2024-09-27 10:06:21 +01:00
|
|
|
val _ =
|
|
|
|
|
AppDraw.drawModalText (modalTextDrawObject, modalTextDrawLength)
|
|
|
|
|
|
2024-07-31 13:32:22 +01:00
|
|
|
val _ = Glfw.swapBuffers window
|
2024-08-14 02:00:07 +01:00
|
|
|
val _ = Glfw.pollEvents ()
|
2024-07-31 13:32:22 +01:00
|
|
|
in
|
2024-08-28 19:34:47 +01:00
|
|
|
run
|
2024-07-31 13:32:22 +01:00
|
|
|
( drawMailbox
|
|
|
|
|
, window
|
|
|
|
|
, graphDrawObject
|
2024-08-03 04:40:53 +01:00
|
|
|
, drawGraphLength
|
2024-08-14 21:24:46 +01:00
|
|
|
, dotDrawObject
|
|
|
|
|
, dotDrawLength
|
2025-07-06 15:14:19 +01:00
|
|
|
, squareDrawObject
|
|
|
|
|
, squareDrawLength
|
2024-09-27 09:08:19 +01:00
|
|
|
, modalTextDrawObject
|
|
|
|
|
, modalTextDrawLength
|
2024-07-31 13:32:22 +01:00
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
| SOME drawMsg =>
|
|
|
|
|
(case drawMsg of
|
2024-08-14 21:24:46 +01:00
|
|
|
DRAW_DOT vec =>
|
2024-07-31 13:32:22 +01:00
|
|
|
let
|
2024-08-14 21:24:46 +01:00
|
|
|
val _ = AppDraw.uploadDotVector (dotDrawObject, vec)
|
|
|
|
|
val dotDrawLength = Vector.length vec div 5
|
2024-07-31 13:32:22 +01:00
|
|
|
in
|
2024-08-28 19:34:47 +01:00
|
|
|
run
|
2024-07-31 13:32:22 +01:00
|
|
|
( drawMailbox
|
|
|
|
|
, window
|
|
|
|
|
, graphDrawObject
|
2024-08-03 04:40:53 +01:00
|
|
|
, drawGraphLength
|
2024-08-14 21:24:46 +01:00
|
|
|
, dotDrawObject
|
|
|
|
|
, dotDrawLength
|
2025-07-06 15:14:19 +01:00
|
|
|
, squareDrawObject
|
|
|
|
|
, squareDrawLength
|
2024-09-27 09:08:19 +01:00
|
|
|
, modalTextDrawObject
|
|
|
|
|
, modalTextDrawLength
|
2024-07-31 22:25:15 +01:00
|
|
|
)
|
|
|
|
|
end
|
2025-07-06 15:14:19 +01:00
|
|
|
| DRAW_SQUARES_AND_RESET_DOTS squareVec =>
|
2024-07-31 22:25:15 +01:00
|
|
|
let
|
2024-08-01 21:39:09 +01:00
|
|
|
val _ =
|
2025-07-06 15:14:19 +01:00
|
|
|
AppDraw.uploadSquaresVector (squareDrawObject, squareVec)
|
|
|
|
|
val squareDrawLength = Vector.length squareVec div 5
|
2024-08-14 21:24:46 +01:00
|
|
|
(* dots are reset by setting dotDrawLength to 0 *)
|
2024-07-31 22:25:15 +01:00
|
|
|
in
|
2024-08-28 19:34:47 +01:00
|
|
|
run
|
2024-07-31 22:25:15 +01:00
|
|
|
( drawMailbox
|
|
|
|
|
, window
|
|
|
|
|
, graphDrawObject
|
2024-08-03 04:40:53 +01:00
|
|
|
, drawGraphLength
|
2024-08-14 21:24:46 +01:00
|
|
|
, dotDrawObject
|
2024-08-03 04:40:53 +01:00
|
|
|
, 0
|
2025-07-06 15:14:19 +01:00
|
|
|
, squareDrawObject
|
|
|
|
|
, squareDrawLength
|
2024-09-27 09:08:19 +01:00
|
|
|
, modalTextDrawObject
|
|
|
|
|
, modalTextDrawLength
|
2024-08-03 04:40:53 +01:00
|
|
|
)
|
|
|
|
|
end
|
2025-07-06 15:14:19 +01:00
|
|
|
| DRAW_SQUARES_AND_DOTS {squares = squareVec, dots = dotsVec} =>
|
2024-08-08 21:35:48 +01:00
|
|
|
let
|
|
|
|
|
val _ =
|
2025-07-06 15:14:19 +01:00
|
|
|
AppDraw.uploadSquaresVector (squareDrawObject, squareVec)
|
|
|
|
|
val squareDrawLength = Vector.length squareVec div 5
|
2024-08-08 21:35:48 +01:00
|
|
|
|
2024-08-14 21:24:46 +01:00
|
|
|
val _ = AppDraw.uploadDotVector (dotDrawObject, dotsVec)
|
|
|
|
|
val dotDrawLength = Vector.length dotsVec div 5
|
2024-08-08 21:35:48 +01:00
|
|
|
in
|
2024-08-28 19:34:47 +01:00
|
|
|
run
|
2024-08-08 21:35:48 +01:00
|
|
|
( drawMailbox
|
|
|
|
|
, window
|
|
|
|
|
, graphDrawObject
|
|
|
|
|
, drawGraphLength
|
2024-08-14 21:24:46 +01:00
|
|
|
, dotDrawObject
|
|
|
|
|
, dotDrawLength
|
2025-07-06 15:14:19 +01:00
|
|
|
, squareDrawObject
|
|
|
|
|
, squareDrawLength
|
2024-09-27 09:08:19 +01:00
|
|
|
, modalTextDrawObject
|
|
|
|
|
, modalTextDrawLength
|
2024-08-08 21:35:48 +01:00
|
|
|
)
|
|
|
|
|
end
|
2024-08-14 21:24:46 +01:00
|
|
|
| CLEAR_DOTS =>
|
2024-08-08 21:35:48 +01:00
|
|
|
let
|
2024-08-14 21:24:46 +01:00
|
|
|
val dotDrawLength = 0
|
2024-08-08 21:35:48 +01:00
|
|
|
in
|
2024-08-28 19:34:47 +01:00
|
|
|
run
|
2024-08-08 21:35:48 +01:00
|
|
|
( drawMailbox
|
|
|
|
|
, window
|
|
|
|
|
, graphDrawObject
|
|
|
|
|
, drawGraphLength
|
2024-08-14 21:24:46 +01:00
|
|
|
, dotDrawObject
|
|
|
|
|
, dotDrawLength
|
2025-07-06 15:14:19 +01:00
|
|
|
, squareDrawObject
|
|
|
|
|
, squareDrawLength
|
2024-09-27 09:08:19 +01:00
|
|
|
, modalTextDrawObject
|
|
|
|
|
, modalTextDrawLength
|
2024-08-08 21:35:48 +01:00
|
|
|
)
|
|
|
|
|
end
|
2025-07-06 15:14:19 +01:00
|
|
|
| RESIZE_SQUARES_DOTS_AND_GRAPH {squares, graphLines, dots} =>
|
2024-08-03 04:40:53 +01:00
|
|
|
let
|
2025-07-06 15:14:19 +01:00
|
|
|
val _ = AppDraw.uploadSquaresVector (squareDrawObject, squares)
|
|
|
|
|
val squareDrawLength = Vector.length squares div 5
|
2024-08-14 21:35:01 +01:00
|
|
|
|
2024-08-08 05:56:20 +01:00
|
|
|
val _ = AppDraw.uploadGraphLines (graphDrawObject, graphLines)
|
|
|
|
|
val drawGraphLength = Vector.length graphLines div 2
|
2024-08-14 21:35:01 +01:00
|
|
|
|
|
|
|
|
val _ = AppDraw.uploadDotVector (dotDrawObject, dots)
|
|
|
|
|
val dotDrawLength = Vector.length dots div 5
|
2024-08-03 04:40:53 +01:00
|
|
|
in
|
2024-08-28 19:34:47 +01:00
|
|
|
run
|
2024-08-03 04:40:53 +01:00
|
|
|
( drawMailbox
|
|
|
|
|
, window
|
|
|
|
|
, graphDrawObject
|
|
|
|
|
, drawGraphLength
|
2024-08-14 21:24:46 +01:00
|
|
|
, dotDrawObject
|
2024-08-14 21:35:01 +01:00
|
|
|
, dotDrawLength
|
2025-07-06 15:14:19 +01:00
|
|
|
, squareDrawObject
|
|
|
|
|
, squareDrawLength
|
2024-09-27 09:08:19 +01:00
|
|
|
, modalTextDrawObject
|
|
|
|
|
, modalTextDrawLength
|
2024-07-31 13:32:22 +01:00
|
|
|
)
|
2024-07-31 14:52:12 +01:00
|
|
|
end
|
2024-08-14 02:35:44 +01:00
|
|
|
| DRAW_GRAPH graphLines =>
|
|
|
|
|
let
|
|
|
|
|
val _ = AppDraw.uploadGraphLines (graphDrawObject, graphLines)
|
|
|
|
|
val drawGraphLength = Vector.length graphLines div 2
|
|
|
|
|
in
|
2024-08-28 19:34:47 +01:00
|
|
|
run
|
2024-08-14 02:35:44 +01:00
|
|
|
( drawMailbox
|
|
|
|
|
, window
|
|
|
|
|
, graphDrawObject
|
|
|
|
|
, drawGraphLength
|
2024-08-14 21:24:46 +01:00
|
|
|
, dotDrawObject
|
|
|
|
|
, dotDrawLength
|
2025-07-06 15:14:19 +01:00
|
|
|
, squareDrawObject
|
|
|
|
|
, squareDrawLength
|
2024-09-27 09:08:19 +01:00
|
|
|
, modalTextDrawObject
|
|
|
|
|
, modalTextDrawLength
|
2024-08-14 02:35:44 +01:00
|
|
|
)
|
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
|
2025-07-06 15:14:19 +01:00
|
|
|
, squareDrawObject
|
|
|
|
|
, squareDrawLength
|
2024-09-27 10:06:21 +01:00
|
|
|
, modalTextDrawObject
|
|
|
|
|
, modalTextDrawLength
|
|
|
|
|
)
|
2024-08-28 20:11:00 +01:00
|
|
|
end)
|
2024-07-31 10:03:30 +01:00
|
|
|
else
|
|
|
|
|
Glfw.terminate ()
|
|
|
|
|
end
|