From d7268232490b7d5038c9e6d28e3efdfed211e06d Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Tue, 30 Jul 2024 10:48:46 +0100 Subject: [PATCH] add function to assist in getting vertex/fragment buffers and shaders, to help with drawing --- imperative-shell/app-draw.sml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/imperative-shell/app-draw.sml b/imperative-shell/app-draw.sml index e8bce9f..fc4cc9a 100644 --- a/imperative-shell/app-draw.sml +++ b/imperative-shell/app-draw.sml @@ -1,5 +1,40 @@ structure AppDraw = struct + type draw_object = + { vertexBuffer: Word32.word + , vertexShader: Word32.word + , fragmentBuffer: Word32.word + , fragmentBuffer: Word32.word + , fragmentShader: 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 + in + { vertexBuffer = vertexBuffer + , vertexShader = vertexShader + , fragmentBuffer = fragmentBuffer + , fragmentShader = fragmentShader + , program = program + } + end + val graphLines = #[ (* x = ~0.95 *)