From f408310ab7f7140d591ccb06fae898cf0e17cf45 Mon Sep 17 00:00:00 2001 From: David Jozis Date: Sun, 14 Oct 2018 12:38:54 -0400 Subject: [PATCH 1/4] Removed buffer copy from webgl example --- examples/webgl/src/lib.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/examples/webgl/src/lib.rs b/examples/webgl/src/lib.rs index 69c635f5..efb4bb5c 100644 --- a/examples/webgl/src/lib.rs +++ b/examples/webgl/src/lib.rs @@ -6,6 +6,12 @@ use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use web_sys::{WebGlProgram, WebGlRenderingContext, WebGlShader}; +#[wasm_bindgen] +extern { + #[wasm_bindgen(js_namespace = Reflect)] + fn get(obj: &JsValue, member: &str) -> JsValue; +} + #[wasm_bindgen] pub fn draw() { let document = web_sys::window().unwrap().document().unwrap(); @@ -44,17 +50,17 @@ pub fn draw() { let program = link_program(&context, [vert_shader, frag_shader].iter()).unwrap(); context.use_program(Some(&program)); - let vertices = [-0.7, -0.7, 0.0, 0.7, -0.7, 0.0, 0.0, 0.7, 0.0]; - let vert_array = js_sys::Float32Array::new(&wasm_bindgen::JsValue::from(vertices.len() as u32)); - for (i, f) in vertices.iter().enumerate() { - vert_array.fill(*f, i as u32, (i + 1) as u32); - } + let vertices: [f32; 9] = [-0.7, -0.7, 0.0, 0.7, -0.7, 0.0, 0.0, 0.7, 0.0]; + let vert_array = js_sys::Float32Array::new(&get(&wasm_bindgen::memory(), "buffer")).subarray( + &vertices as *const f32 as u32 / 4, + &vertices as *const f32 as u32 / 4 + vertices.len() as u32, + ); let buffer = context.create_buffer().unwrap(); context.bind_buffer(WebGlRenderingContext::ARRAY_BUFFER, Some(&buffer)); - context.buffer_data_with_opt_array_buffer( + context.buffer_data_with_array_buffer_view( WebGlRenderingContext::ARRAY_BUFFER, - Some(&vert_array.buffer()), + vert_array.as_ref(), WebGlRenderingContext::STATIC_DRAW, ); context.vertex_attrib_pointer_with_i32(0, 3, WebGlRenderingContext::FLOAT, false, 0, 0); From 52128e9baa52f095859278f677019ad8aa63289b Mon Sep 17 00:00:00 2001 From: David Jozis Date: Sun, 14 Oct 2018 13:16:43 -0400 Subject: [PATCH 2/4] Cleaned up memory buffer access --- examples/webgl/src/lib.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/webgl/src/lib.rs b/examples/webgl/src/lib.rs index efb4bb5c..8ee2af89 100644 --- a/examples/webgl/src/lib.rs +++ b/examples/webgl/src/lib.rs @@ -5,12 +5,7 @@ extern crate web_sys; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use web_sys::{WebGlProgram, WebGlRenderingContext, WebGlShader}; - -#[wasm_bindgen] -extern { - #[wasm_bindgen(js_namespace = Reflect)] - fn get(obj: &JsValue, member: &str) -> JsValue; -} +use js_sys::{WebAssembly}; #[wasm_bindgen] pub fn draw() { @@ -51,7 +46,8 @@ pub fn draw() { 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 vert_array = js_sys::Float32Array::new(&get(&wasm_bindgen::memory(), "buffer")).subarray( + let memory_buffer = wasm_bindgen::memory().dyn_into::().unwrap().buffer(); + let vert_array = js_sys::Float32Array::new(&memory_buffer).subarray( &vertices as *const f32 as u32 / 4, &vertices as *const f32 as u32 / 4 + vertices.len() as u32, ); From 30bb9b09d3b946a0ef26e69935d5f48113ebc74c Mon Sep 17 00:00:00 2001 From: David Jozis Date: Sun, 14 Oct 2018 16:50:35 -0400 Subject: [PATCH 3/4] Switched from raw pointer casts to using as_ptr() --- examples/webgl/src/lib.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/webgl/src/lib.rs b/examples/webgl/src/lib.rs index 8ee2af89..5fc2437a 100644 --- a/examples/webgl/src/lib.rs +++ b/examples/webgl/src/lib.rs @@ -47,9 +47,10 @@ pub fn draw() { 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::().unwrap().buffer(); + let verticles_location = vertices.as_ptr() as u32 / 4; let vert_array = js_sys::Float32Array::new(&memory_buffer).subarray( - &vertices as *const f32 as u32 / 4, - &vertices as *const f32 as u32 / 4 + vertices.len() as u32, + verticles_location, + verticles_location + vertices.len() as u32, ); let buffer = context.create_buffer().unwrap(); From b369932b375ea445201817adf0af94af648e04af Mon Sep 17 00:00:00 2001 From: David Jozis Date: Sun, 14 Oct 2018 17:00:56 -0400 Subject: [PATCH 4/4] Fixed typo --- examples/webgl/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/webgl/src/lib.rs b/examples/webgl/src/lib.rs index 5fc2437a..5e338fa2 100644 --- a/examples/webgl/src/lib.rs +++ b/examples/webgl/src/lib.rs @@ -47,10 +47,10 @@ pub fn draw() { 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::().unwrap().buffer(); - let verticles_location = vertices.as_ptr() as u32 / 4; + let vertices_location = vertices.as_ptr() as u32 / 4; let vert_array = js_sys::Float32Array::new(&memory_buffer).subarray( - verticles_location, - verticles_location + vertices.len() as u32, + vertices_location, + vertices_location + vertices.len() as u32, ); let buffer = context.create_buffer().unwrap();