summaryrefslogtreecommitdiff
path: root/WebInterface/wasm/asm-paint/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'WebInterface/wasm/asm-paint/src/lib.rs')
-rw-r--r--WebInterface/wasm/asm-paint/src/lib.rs119
1 files changed, 119 insertions, 0 deletions
diff --git a/WebInterface/wasm/asm-paint/src/lib.rs b/WebInterface/wasm/asm-paint/src/lib.rs
index 8b0ee8f..432c370 100644
--- a/WebInterface/wasm/asm-paint/src/lib.rs
+++ b/WebInterface/wasm/asm-paint/src/lib.rs
@@ -17,3 +17,122 @@ pub fn entry() {
let app = app::App::new().unwrap();
app.run();
}
+
+/*
+use js_sys::WebAssembly;
+use wasm_bindgen::prelude::*;
+use wasm_bindgen::JsCast;
+use web_sys::{WebGlProgram, WebGlRenderingContext, WebGlShader};
+
+#[wasm_bindgen(start)]
+pub fn start() -> Result<(), JsValue> {
+ let document = web_sys::window().unwrap().document().unwrap();
+ let canvas = document.get_element_by_id("canvas").unwrap();
+ let canvas: web_sys::HtmlCanvasElement = canvas.dyn_into::<web_sys::HtmlCanvasElement>()?;
+
+ let context = canvas
+ .get_context("webgl")?
+ .unwrap()
+ .dyn_into::<WebGlRenderingContext>()?;
+
+ let vert_shader = compile_shader(
+ &context,
+ WebGlRenderingContext::VERTEX_SHADER,
+ r#"
+ attribute vec4 position;
+ void main() {
+ gl_Position = position;
+ }
+ "#,
+ )?;
+ let frag_shader = compile_shader(
+ &context,
+ WebGlRenderingContext::FRAGMENT_SHADER,
+ r#"
+ void main() {
+ gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
+ }
+ "#,
+ )?;
+ let program = link_program(&context, &vert_shader, &frag_shader)?;
+ context.use_program(Some(&program));
+
+ let vertices: [f32; 9] = [-0.7, -0.7, 0.0, 0.7, -0.7, 0.0, 0.0, 0.7, 0.0];
+ let memory_buffer = wasm_bindgen::memory()
+ .dyn_into::<WebAssembly::Memory>()?
+ .buffer();
+ let vertices_location = vertices.as_ptr() as u32 / 4;
+ let vert_array = js_sys::Float32Array::new(&memory_buffer)
+ .subarray(vertices_location, vertices_location + vertices.len() as u32);
+
+ let buffer = context.create_buffer().ok_or("failed to create buffer")?;
+ context.bind_buffer(WebGlRenderingContext::ARRAY_BUFFER, Some(&buffer));
+ context.buffer_data_with_array_buffer_view(
+ WebGlRenderingContext::ARRAY_BUFFER,
+ &vert_array,
+ WebGlRenderingContext::STATIC_DRAW,
+ );
+ context.vertex_attrib_pointer_with_i32(0, 3, WebGlRenderingContext::FLOAT, false, 0, 0);
+ context.enable_vertex_attrib_array(0);
+
+ context.clear_color(0.0, 0.0, 0.0, 1.0);
+ context.clear(WebGlRenderingContext::COLOR_BUFFER_BIT);
+
+ context.draw_arrays(
+ WebGlRenderingContext::TRIANGLES,
+ 0,
+ (vertices.len() / 3) as i32,
+ );
+ Ok(())
+}
+
+pub fn compile_shader(
+ context: &WebGlRenderingContext,
+ shader_type: u32,
+ source: &str,
+) -> Result<WebGlShader, String> {
+ let shader = context
+ .create_shader(shader_type)
+ .ok_or_else(|| String::from("Unable to create shader object"))?;
+ context.shader_source(&shader, source);
+ context.compile_shader(&shader);
+
+ if context
+ .get_shader_parameter(&shader, WebGlRenderingContext::COMPILE_STATUS)
+ .as_bool()
+ .unwrap_or(false)
+ {
+ Ok(shader)
+ } else {
+ Err(context
+ .get_shader_info_log(&shader)
+ .unwrap_or_else(|| String::from("Unknown error creating shader")))
+ }
+}
+
+pub fn link_program(
+ context: &WebGlRenderingContext,
+ vert_shader: &WebGlShader,
+ frag_shader: &WebGlShader,
+) -> Result<WebGlProgram, String> {
+ let program = context
+ .create_program()
+ .ok_or_else(|| String::from("Unable to create shader object"))?;
+
+ context.attach_shader(&program, vert_shader);
+ context.attach_shader(&program, frag_shader);
+ context.link_program(&program);
+
+ if context
+ .get_program_parameter(&program, WebGlRenderingContext::LINK_STATUS)
+ .as_bool()
+ .unwrap_or(false)
+ {
+ Ok(program)
+ } else {
+ Err(context
+ .get_program_info_log(&program)
+ .unwrap_or_else(|| String::from("Unknown error creating program object")))
+ }
+}
+*/