From eb0ca122d6411f5b7c01c8c510d558b612eca84e Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Tue, 1 Oct 2024 08:25:12 +0100 Subject: [PATCH] add draw module (very incomplete) --- shell/gl-draw.sml | 50 ++++++++++++++++++++++++++++++++++++++++++++++ shf | Bin 837632 -> 837632 bytes shf.mlb | 1 + 3 files changed, 51 insertions(+) create mode 100644 shell/gl-draw.sml diff --git a/shell/gl-draw.sml b/shell/gl-draw.sml new file mode 100644 index 0000000..4367f79 --- /dev/null +++ b/shell/gl-draw.sml @@ -0,0 +1,50 @@ +structure GlDraw = +struct + (* The name doesn't make it clear, but this structure + * couples GLFW and OpenGL. + * I'm not sure if I will use native windowing systems + * or other graphics APIs at a later stage, + * but the current priority is GLFW + OpenGL. + * *) + type t = + { textVertexBuffer: Word32.word + , textProgram: Word32.word + , textDrawLength: int + , window: MLton.Pointer.t + } + + fun createShader (shaderType, shaderString) = + let + val shader = Gles3.createShader Gles3.VERTEX_SHADER + val _ = Gles3.shaderSource (shader, shaderString) + val _ = Gles3.compileShader shader + in + shader + end + + fun createProgram (vertexShader, fragmentShader) = + let + val program = Gles3.createProgram () + val _ = Gles3.attachShader (program, vertexShader) + val _ = Gles3.attachShader (program, fragmentShader) + val _ = Gles3.linkProgram program + in + program + end + + fun create () = + let + (* Set up GLFW. *) + val _ = Glfw.init () + 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 (1600, 900, "shf") + val _ = Glfw.makeContextCurrent window + val _ = Gles3.loadGlad () + + (* todo: create vertex buffer, program, etc. for text. *) + in + {window = window} + end +end diff --git a/shf b/shf index baa6fde4c0af8d88865cb09fc0cb7092fd48c0a4..7a67f0de885734de778915980dedcce394f832e4 100755 GIT binary patch delta 5314 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