get drawing of triangles implemented
This commit is contained in:
@@ -106,4 +106,45 @@ struct
|
||||
in
|
||||
()
|
||||
end
|
||||
|
||||
fun initTriangles () =
|
||||
let
|
||||
val triangleDrawObject = initDrawObject
|
||||
(Constants.graphVertexShaderString, Constants.graphFragmentShaderString)
|
||||
val {vertexBuffer, program, ...} = triangleDrawObject
|
||||
|
||||
val _ = Gles3.bindBuffer vertexBuffer
|
||||
val _ =
|
||||
Gles3.bufferData
|
||||
( #[]
|
||||
, 0
|
||||
, Gles3.STATIC_DRAW ()
|
||||
)
|
||||
val _ = Gles3.vertexAttribPointer (0, 2, 2, 0)
|
||||
val _ = Gles3.enableVertexAttribArray 0
|
||||
in
|
||||
triangleDrawObject
|
||||
end
|
||||
|
||||
fun uploadTrianglesVector (triangleDrawObject: draw_object, vec) =
|
||||
let
|
||||
val {vertexBuffer, ...} = triangleDrawObject
|
||||
val _ = Gles3.bindBuffer vertexBuffer
|
||||
val _ = Gles3.bufferData (vec, Vector.length vec, Gles3.STATIC_DRAW ())
|
||||
in
|
||||
()
|
||||
end
|
||||
|
||||
fun drawTriangles (triangleDrawObject: draw_object, triangleDrawLength) =
|
||||
let
|
||||
val {vertexBuffer, program, ...} = triangleDrawObject
|
||||
val _ = Gles3.bindBuffer vertexBuffer
|
||||
val _ = Gles3.vertexAttribPointer (0, 2, 2, 0)
|
||||
val _ = Gles3.enableVertexAttribArray 0
|
||||
val _ = Gles3.useProgram program
|
||||
val _ = Gles3.drawArrays
|
||||
(Gles3.TRIANGLES (), 0, triangleDrawLength)
|
||||
in
|
||||
()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -19,7 +19,14 @@ struct
|
||||
end
|
||||
|
||||
fun draw
|
||||
(drawMailbox, window, graphDrawObject, buttonDrawObject, buttonDrawLength) =
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, buttonDrawObject
|
||||
, buttonDrawLength
|
||||
, triangleDrawObject
|
||||
, triangleDrawLength
|
||||
) =
|
||||
if not (Glfw.windowShouldClose window) then
|
||||
case Mailbox.recvPoll drawMailbox of
|
||||
NONE =>
|
||||
@@ -28,6 +35,7 @@ struct
|
||||
val _ = Gles3.clear ()
|
||||
|
||||
val _ = AppDraw.drawGraphLines graphDrawObject
|
||||
val _ = AppDraw.drawTriangles (triangleDrawObject, triangleDrawLength)
|
||||
val _ = AppDraw.drawButton (buttonDrawObject, buttonDrawLength)
|
||||
|
||||
val _ = Glfw.pollEvents ()
|
||||
@@ -39,6 +47,8 @@ struct
|
||||
, graphDrawObject
|
||||
, buttonDrawObject
|
||||
, buttonDrawLength
|
||||
, triangleDrawObject
|
||||
, triangleDrawLength
|
||||
)
|
||||
end
|
||||
| SOME drawMsg =>
|
||||
@@ -54,6 +64,24 @@ struct
|
||||
, graphDrawObject
|
||||
, buttonDrawObject
|
||||
, buttonDrawLength
|
||||
, triangleDrawObject
|
||||
, triangleDrawLength
|
||||
)
|
||||
end
|
||||
| DRAW_TRIANGLES_AND_RESET_BUTTONS triangleVec =>
|
||||
let
|
||||
val _ = AppDraw.uploadTrianglesVector (triangleDrawObject, triangleVec)
|
||||
val triangleDrawLength = Vector.length triangleVec div 2
|
||||
(* have to reset buttons too *)
|
||||
in
|
||||
draw
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, buttonDrawObject
|
||||
, 0
|
||||
, triangleDrawObject
|
||||
, triangleDrawLength
|
||||
)
|
||||
end
|
||||
| NO_DRAW =>
|
||||
@@ -63,6 +91,8 @@ struct
|
||||
, graphDrawObject
|
||||
, buttonDrawObject
|
||||
, buttonDrawLength
|
||||
, triangleDrawObject
|
||||
, triangleDrawLength
|
||||
))
|
||||
else
|
||||
Glfw.terminate ()
|
||||
|
||||
@@ -9,13 +9,15 @@ struct
|
||||
val _ = Glfw.windowHint (Glfw.CONTEXT_VERSION_MAJOR (), 3)
|
||||
val _ = Glfw.windowHint (Glfw.DEPRECATED (), Glfw.FALSE ())
|
||||
val _ = Glfw.windowHint (Glfw.SAMPLES (), 4)
|
||||
val window =
|
||||
Glfw.createWindow (Constants.windowWidth, Constants.windowHeight, "MLton - dot to dot")
|
||||
val window =
|
||||
Glfw.createWindow
|
||||
(Constants.windowWidth, Constants.windowHeight, "MLton - dot to dot")
|
||||
val _ = Glfw.makeContextCurrent window
|
||||
val _ = Gles3.loadGlad ()
|
||||
|
||||
val graphDrawObject = AppDraw.initGraphLines ()
|
||||
val buttonDrawObject = AppDraw.initButton ()
|
||||
val triangleDrawObject = AppDraw.initTriangles ()
|
||||
|
||||
val inputMailbox = Mailbox.mailbox ()
|
||||
val drawMailbox = Mailbox.mailbox ()
|
||||
@@ -25,7 +27,14 @@ struct
|
||||
val _ = CML.spawn (fn () => EventLoop.update (inputMailbox, drawMailbox))
|
||||
val _ = CML.spawn (fn () =>
|
||||
EventLoop.draw
|
||||
(drawMailbox, window, graphDrawObject, buttonDrawObject, 0))
|
||||
( drawMailbox
|
||||
, window
|
||||
, graphDrawObject
|
||||
, buttonDrawObject
|
||||
, 0
|
||||
, triangleDrawObject
|
||||
, 0
|
||||
))
|
||||
in
|
||||
()
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user