From 3c21251fec1a1ce4cee42337e727cc8dadfd9563 Mon Sep 17 00:00:00 2001 From: natrixaeria Date: Sat, 21 Dec 2019 20:45:49 +0100 Subject: Draw violet background --- WebInterface/wasm/asm-paint/src/canvas.rs | 16 ++++------------ WebInterface/wasm/asm-paint/src/shader.rs | 30 ++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/WebInterface/wasm/asm-paint/src/canvas.rs b/WebInterface/wasm/asm-paint/src/canvas.rs index 54691e8..400e258 100644 --- a/WebInterface/wasm/asm-paint/src/canvas.rs +++ b/WebInterface/wasm/asm-paint/src/canvas.rs @@ -25,18 +25,10 @@ impl Canvas { } pub fn init(&mut self) -> Result<(), ()> { - debug!("create program"); - self.shaders.create_program(&self.ctx) - .map_err(|e| error!("webgl2 create program: {}", e))?; - debug!("create vertex shader"); - self.shaders.create_vertex_shader(&self.ctx) - .map_err(|e| error!("webgl2 create vertex shader: {}", e))?; - debug!("create fragment shader"); - self.shaders.create_fragment_shader(&self.ctx) - .map_err(|e| error!("webgl2 create fragment shader: {}", e))?; - debug!("compile shader program"); - self.shaders.compile(&self.ctx) - .map_err(|e| error!("webgl2 shader: {}", e)) + self.shaders.init(&self.ctx).map_err(|_|())?; + self.ctx.clear_color(1.0, 0.2, 1.0, 1.0); + self.ctx.clear(WebGl2RenderingContext::COLOR_BUFFER_BIT); + Ok(()) } } diff --git a/WebInterface/wasm/asm-paint/src/shader.rs b/WebInterface/wasm/asm-paint/src/shader.rs index 3311b6a..2823cd4 100644 --- a/WebInterface/wasm/asm-paint/src/shader.rs +++ b/WebInterface/wasm/asm-paint/src/shader.rs @@ -18,16 +18,18 @@ void main() { pub struct Shaders { program: Option, + pos_loc: i32, } impl Shaders { pub fn new() -> Self { Self { program: None, + pos_loc: -1 } } - pub fn create_program(&mut self, ctx: &WebGl2RenderingContext) -> Result<(), String> { + fn create_program(&mut self, ctx: &WebGl2RenderingContext) -> Result<(), String> { self.program = Some(ctx.create_program().ok_or("could not create program id")?); Ok(()) } @@ -48,15 +50,15 @@ impl Shaders { } } - pub fn create_vertex_shader(&mut self, ctx: &WebGl2RenderingContext) -> Result<(), String> { + fn create_vertex_shader(&mut self, ctx: &WebGl2RenderingContext) -> Result<(), String> { self.create_shader(ctx, WebGl2RenderingContext::VERTEX_SHADER, VERTEX_SHADER) } - pub fn create_fragment_shader(&mut self, ctx: &WebGl2RenderingContext) -> Result<(), String> { + fn create_fragment_shader(&mut self, ctx: &WebGl2RenderingContext) -> Result<(), String> { self.create_shader(ctx, WebGl2RenderingContext::FRAGMENT_SHADER, FRAGMENT_SHADER) } - pub fn compile(&mut self, ctx: &WebGl2RenderingContext) -> Result<(), String> { + fn compile(&mut self, ctx: &WebGl2RenderingContext) -> Result<(), String> { let program = self.program.as_ref().ok_or("could not find created program")?; ctx.link_program(program); let status = ctx.get_program_parameter(program, WebGl2RenderingContext::LINK_STATUS); @@ -67,6 +69,26 @@ impl Shaders { } } + pub fn init(&mut self, ctx: &WebGl2RenderingContext) -> Result<(), String> { + debug!("create program"); + self.create_program(ctx) + .map_err(|e| { error!("webgl2 create program: {}", e); e})?; + debug!("create vertex shader"); + self.create_vertex_shader(ctx) + .map_err(|e| { error!("webgl2 create vertex shader: {}", e); e})?; + debug!("create fragment shader"); + self.create_fragment_shader(ctx) + .map_err(|e| { error!("webgl2 create fragment shader: {}", e); e})?; + debug!("compile shader program"); + self.compile(ctx) + .map_err(|e| { error!("webgl2 shader: {}", e); e})?; + let program = self.program.as_ref().ok_or("could not find created program")?; + self.pos_loc = ctx.get_attrib_location(program, "pos"); + trace!("got attrib location 'pos'({})", self.pos_loc); + info!("initialised shader program"); + Ok(()) + } + pub fn remove(&mut self, ctx: &WebGl2RenderingContext) { ctx.delete_program(self.program.as_ref()) } -- cgit v1.2.3-54-g00ecf