add [r, g, b] field to triangle, so we can draw coloured objects (next: add ability to change current colour)

This commit is contained in:
2024-12-29 20:18:29 +00:00
parent cd1cef793e
commit 43eb5f4448
10 changed files with 197 additions and 65 deletions

View File

@@ -111,41 +111,7 @@ struct
val uploadModalText = uploadDotVector
val drawModalText = drawDot
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) =
if triangleDrawLength > 0 then
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
else
()
val initTriangles = initDot
val uploadTrianglesVector = uploadDotVector
val drawTriangles = drawDot
end

View File

@@ -70,7 +70,7 @@ struct
val _ =
AppDraw.uploadTrianglesVector
(triangleDrawObject, triangleVec)
val triangleDrawLength = Vector.length triangleVec div 2
val triangleDrawLength = Vector.length triangleVec div 5
(* dots are reset by setting dotDrawLength to 0 *)
in
run
@@ -91,7 +91,7 @@ struct
val _ =
AppDraw.uploadTrianglesVector
(triangleDrawObject, triangleVec)
val triangleDrawLength = Vector.length triangleVec div 2
val triangleDrawLength = Vector.length triangleVec div 5
val _ = AppDraw.uploadDotVector (dotDrawObject, dotsVec)
val dotDrawLength = Vector.length dotsVec div 5
@@ -130,7 +130,7 @@ struct
let
val _ =
AppDraw.uploadTrianglesVector (triangleDrawObject, triangles)
val triangleDrawLength = Vector.length triangles div 2
val triangleDrawLength = Vector.length triangles div 5
val _ = AppDraw.uploadGraphLines (graphDrawObject, graphLines)
val drawGraphLength = Vector.length graphLines div 2

View File

@@ -10,9 +10,9 @@ struct
datatype parse_result = OK of AppType.triangle list | PARSE_ERROR
val structureName = "UnknownChar"
val filename = "fonts/unknown-char.dsc"
val exportFilename = "fonts/unknown-char.sml"
val structureName = "Green"
val filename = "green.dsc"
val exportFilename = "green.sml"
fun ndcToLerpX num =
let
@@ -40,9 +40,14 @@ struct
^ ")) / windowHeight) - 1.0"
end
fun colToString col =
let val col = Real32.toString col
in if String.isSubstring "." col then col else col ^ ".0"
end
fun helpExportTriangles (io, triangles) =
case triangles of
{x1, y1, x2, y2, x3, y3} :: tl =>
{x1, y1, x2, y2, x3, y3, r, g, b} :: tl =>
let
val x1 = ndcToLerpX x1
val x2 = ndcToLerpX x2
@@ -52,6 +57,10 @@ struct
val y2 = ndcToLerpY y2
val y3 = ndcToLerpY y3
val r = colToString r
val g = colToString g
val b = colToString b
val line = String.concat
[ x1
, ",\n"
@@ -64,9 +73,15 @@ struct
, x3
, ",\n"
, y3
, ", \n"
, r
, ", "
, g
, ", "
, b
, case tl of
[] => ", r, g, b\n"
| _ => ", r, g, b,\n"
[] => "\n"
| _ => ",\n"
]
val _ = TextIO.output (io, line)
@@ -126,14 +141,17 @@ struct
val inputMsg =
case triangles of
OK triangles => USE_TRIANGLES triangles
| PARSE_ERROR => TRIANGLES_LOAD_ERROR
| PARSE_ERROR =>
let val _ = print "parse error\n"
in TRIANGLES_LOAD_ERROR
end
in
Mailbox.send (inputMailbox, inputMsg)
end
fun helpSaveTriangles (triangles, io) =
case triangles of
{x1, y1, x2, y2, x3, y3} :: tl =>
{x1, y1, x2, y2, x3, y3, r, g, b} :: tl =>
let
val triString = String.concat
[ "x "
@@ -150,6 +168,14 @@ struct
, Real32.toString x3
, " y "
, Real32.toString y3
, " r "
, Real32.toString r
, " g "
, Real32.toString g
, " b "
, Real32.toString b
, "\n"
]