From e6298e7b613a3d0e55e295237c57e24743af685c Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Wed, 2 Oct 2024 22:09:22 +0100 Subject: [PATCH] initialise text vertex buffer and text program in gl-draw.sml, and add functions to draw --- shell/gl-draw.sml | 62 +++++++++++++++++++++++++++++++++++++--------- shf | Bin 837632 -> 837632 bytes 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/shell/gl-draw.sml b/shell/gl-draw.sml index 4367f79..450ec94 100644 --- a/shell/gl-draw.sml +++ b/shell/gl-draw.sml @@ -15,7 +15,7 @@ struct fun createShader (shaderType, shaderString) = let - val shader = Gles3.createShader Gles3.VERTEX_SHADER + val shader = Gles3.createShader shaderType val _ = Gles3.shaderSource (shader, shaderString) val _ = Gles3.compileShader shader in @@ -32,19 +32,57 @@ struct program end - fun create () = + fun create window = 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 () + (* create vertex buffer, program, etc. for text. *) + val textVertexBuffer = Gles3.createBuffer () + val xyrgbVertexShader = createShader + (Gles3.VERTEX_SHADER, GlShaders.xyrgbVertexShaderString) - (* todo: create vertex buffer, program, etc. for text. *) + val rgbFragmentShader = createShader + (Gles3.FRAGMENT_SHADER, GlShaders.rgbFragmentShaderString) + + val textProgram = createProgram (xyrgbVertexShader, rgbFragmentShader) + + (* clean up shaders which are no longer needed once progran is linked. *) + val _ = Gles3.deleteShader xyrgbVertexShader + val _ = Gles3.deleteShader rgbFragmentShader in - {window = window} + { textVertexBuffer = textVertexBuffer + , textProgram = textProgram + , textDrawLength = 0 + , window = window + } + end + + fun uploadText ({textVertexBuffer, ...}: draw_object, vec) = + let + val _ = Gles3.bindBuffer textVertexBuffer + val _ = Gles3.bufferData (vec, Vector.length vec, Gles3.STATIC_DRAW) + in + () + end + + fun drawText ({textVertexBuffer, textProgram, textDrawLength, ...}: t) = + if textDrawLength > 0 then + let + val _ = Gles3.bindBuffer textVertexBuffer + 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 textProgram + val _ = Gles3.drawArrays (Gles3.TRIANGLES, 0, textDrawLength) + in + () + end + else + () + + fun draw (drawObject: t) = + let + val _ = drawText drawObject + in + () end end diff --git a/shf b/shf index 7a67f0de885734de778915980dedcce394f832e4..2b58fbab02361cab4970c84303dbeedd425eb47b 100755 GIT binary patch delta 5002 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