Add 'dotscape/' from commit 'f306501a68a51b634e895c5fdac70788ae899d75'
git-subtree-dir: dotscape git-subtree-mainline:6b91d64fc3git-subtree-split:f306501a68
This commit is contained in:
117
dotscape/imperative-shell/app-draw.sml
Normal file
117
dotscape/imperative-shell/app-draw.sml
Normal file
@@ -0,0 +1,117 @@
|
||||
structure AppDraw =
|
||||
struct
|
||||
type draw_object = {vertexBuffer: Word32.word, program: Word32.word}
|
||||
|
||||
fun initDrawObject (vertexShaderString, fragmentShaderString) : draw_object =
|
||||
let
|
||||
val vertexBuffer = Gles3.createBuffer ()
|
||||
val vertexShader = Gles3.createShader (Gles3.VERTEX_SHADER ())
|
||||
val _ = Gles3.shaderSource (vertexShader, vertexShaderString)
|
||||
val _ = Gles3.compileShader vertexShader
|
||||
|
||||
val fragmentBuffer = Gles3.createBuffer ()
|
||||
val fragmentShader = Gles3.createShader (Gles3.FRAGMENT_SHADER ())
|
||||
val _ = Gles3.shaderSource (fragmentShader, fragmentShaderString)
|
||||
val _ = Gles3.compileShader fragmentShader
|
||||
|
||||
val program = Gles3.createProgram ()
|
||||
val _ = Gles3.attachShader (program, vertexShader)
|
||||
val _ = Gles3.attachShader (program, fragmentShader)
|
||||
val _ = Gles3.linkProgram program
|
||||
|
||||
(* Flag shaders for deletion as we no longer need them
|
||||
* once the program is linked. *)
|
||||
val _ = Gles3.deleteShader vertexShader
|
||||
val _ = Gles3.deleteShader fragmentShader
|
||||
in
|
||||
{vertexBuffer = vertexBuffer, program = program}
|
||||
end
|
||||
|
||||
fun initGraphLines () =
|
||||
let
|
||||
val graphDrawObject = initDrawObject
|
||||
(Constants.graphVertexShaderString, Constants.graphFragmentShaderString)
|
||||
val {vertexBuffer, program} = graphDrawObject
|
||||
|
||||
val _ = Gles3.bindBuffer vertexBuffer
|
||||
val _ = Gles3.bufferData (#[], 0, Gles3.STATIC_DRAW ())
|
||||
val _ = Gles3.vertexAttribPointer (0, 2, 2, 0)
|
||||
val _ = Gles3.enableVertexAttribArray 0
|
||||
in
|
||||
graphDrawObject
|
||||
end
|
||||
|
||||
fun uploadGraphLines (graphDrawObject: draw_object, vec) =
|
||||
let
|
||||
val {vertexBuffer, ...} = graphDrawObject
|
||||
val _ = Gles3.bindBuffer vertexBuffer
|
||||
val _ = Gles3.bufferData (vec, Vector.length vec, Gles3.STATIC_DRAW ())
|
||||
in
|
||||
()
|
||||
end
|
||||
|
||||
fun drawGraphLines (graphDrawObject: draw_object, graphDrawLength) =
|
||||
let
|
||||
val {vertexBuffer, program} = graphDrawObject
|
||||
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, graphDrawLength)
|
||||
in
|
||||
()
|
||||
end
|
||||
|
||||
fun initDot () =
|
||||
let
|
||||
val dotDrawObject = initDrawObject
|
||||
( Constants.colouredVertexShaderString
|
||||
, Constants.colouredFragmentShaderString
|
||||
)
|
||||
val {vertexBuffer, program} = dotDrawObject
|
||||
|
||||
val _ = Gles3.bindBuffer vertexBuffer
|
||||
val _ = Gles3.bufferData (#[], 0, Gles3.STATIC_DRAW ())
|
||||
val _ = Gles3.vertexAttribPointer (0, 2, 5, 0)
|
||||
val _ = Gles3.enableVertexAttribArray 0
|
||||
|
||||
val _ = Gles3.vertexAttribPointer (1, 3, 5, 8)
|
||||
val _ = Gles3.enableVertexAttribArray 1
|
||||
in
|
||||
dotDrawObject
|
||||
end
|
||||
|
||||
fun uploadDotVector (dotDrawObject: draw_object, vec) =
|
||||
let
|
||||
val {vertexBuffer, ...} = dotDrawObject
|
||||
val _ = Gles3.bindBuffer vertexBuffer
|
||||
val _ = Gles3.bufferData (vec, Vector.length vec, Gles3.STATIC_DRAW ())
|
||||
in
|
||||
()
|
||||
end
|
||||
|
||||
fun drawDot (dotDrawObject: draw_object, dotDrawLength) =
|
||||
if dotDrawLength > 0 then
|
||||
let
|
||||
val {vertexBuffer, program} = dotDrawObject
|
||||
val _ = Gles3.bindBuffer vertexBuffer
|
||||
val _ = Gles3.vertexAttribPointer (0, 2, 5, 0)
|
||||
val _ = Gles3.enableVertexAttribArray 0
|
||||
val _ = Gles3.vertexAttribPointer (1, 3, 5, 8)
|
||||
val _ = Gles3.enableVertexAttribArray 1
|
||||
val _ = Gles3.useProgram program
|
||||
val _ = Gles3.drawArrays (Gles3.TRIANGLES (), 0, dotDrawLength)
|
||||
in
|
||||
()
|
||||
end
|
||||
else
|
||||
()
|
||||
|
||||
val initModalText = initDot
|
||||
val uploadModalText = uploadDotVector
|
||||
val drawModalText = drawDot
|
||||
|
||||
val initSquares = initDot
|
||||
val uploadSquaresVector = uploadDotVector
|
||||
val drawSquares = drawDot
|
||||
end
|
||||
Reference in New Issue
Block a user