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

174 lines
5.7 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
2024-07-31 22:25:15 +01:00
, triangleDrawObject
, triangleDrawLength
, 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.drawTriangles (triangleDrawObject, triangleDrawLength)
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
2024-07-31 22:25:15 +01:00
, triangleDrawObject
, triangleDrawLength
, 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
2024-07-31 22:25:15 +01:00
, triangleDrawObject
, triangleDrawLength
, modalTextDrawObject
, modalTextDrawLength
2024-07-31 22:25:15 +01:00
)
end
| DRAW_TRIANGLES_AND_RESET_DOTS triangleVec =>
2024-07-31 22:25:15 +01:00
let
val _ =
AppDraw.uploadTrianglesVector
(triangleDrawObject, triangleVec)
2024-07-31 22:25:15 +01:00
val triangleDrawLength = Vector.length triangleVec div 2
(* 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
, triangleDrawObject
, triangleDrawLength
, modalTextDrawObject
, modalTextDrawLength
)
end
| DRAW_TRIANGLES_AND_DOTS {triangles = triangleVec, dots = dotsVec} =>
2024-08-08 21:35:48 +01:00
let
val _ =
AppDraw.uploadTrianglesVector
(triangleDrawObject, triangleVec)
val triangleDrawLength = Vector.length triangleVec div 2
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
2024-08-08 21:35:48 +01:00
, triangleDrawObject
, triangleDrawLength
, 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
2024-08-08 21:35:48 +01:00
, triangleDrawObject
, triangleDrawLength
, modalTextDrawObject
, modalTextDrawLength
2024-08-08 21:35:48 +01:00
)
end
| RESIZE_TRIANGLES_DOTS_AND_GRAPH {triangles, graphLines, dots} =>
let
val _ =
2024-08-08 05:56:20 +01:00
AppDraw.uploadTrianglesVector (triangleDrawObject, triangles)
val triangleDrawLength = Vector.length triangles div 2
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
2024-07-31 22:25:15 +01:00
, triangleDrawObject
, triangleDrawLength
, 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
, triangleDrawObject
, triangleDrawLength
, modalTextDrawObject
, modalTextDrawLength
)
end)
2024-07-31 10:03:30 +01:00
else
Glfw.terminate ()
end