From fccefaccde249cd7c7e7df96c225b52ad1fa9f29 Mon Sep 17 00:00:00 2001 From: Lachlan Sneff Date: Sat, 15 Aug 2020 01:46:10 -0400 Subject: [PATCH] Add support for initialization of local variables to glsl backend (#129) * Add support for initialization of local variables to glsl backend * Cleanup --- src/back/glsl.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/back/glsl.rs b/src/back/glsl.rs index 25f2cc86c6..042a0991ee 100644 --- a/src/back/glsl.rs +++ b/src/back/glsl.rs @@ -170,15 +170,6 @@ pub fn write(module: &Module, out: &mut impl Write) -> Result<(), Error> { .map(|(handle, local)| (handle, namer(local.name.as_ref()))) .collect(); - for (handle, name) in locals.iter() { - writeln!( - out, - "{} {};", - write_type(func.local_variables[*handle].ty, &module.types, &structs)?, - name - )?; - } - let mut builder = StatementBuilder { functions: &functions, globals: &globals_lookup, @@ -194,6 +185,22 @@ pub fn write(module: &Module, out: &mut impl Write) -> Result<(), Error> { locals: &func.local_variables, }; + for (handle, name) in locals.iter() { + let ty = write_type(func.local_variables[*handle].ty, &module.types, &structs)?; + let init = func.local_variables[*handle].init; + if let Some(init) = init { + writeln!( + out, + "{} {} = {init};", + ty, + name, + init = write_expression(&func.expressions[init], &module, &mut builder)?.0, + )?; + } else { + writeln!(out, "{} {};", ty, name,)?; + } + } + for sta in func.body.iter() { writeln!(out, "{}", write_statement(sta, module, &mut builder)?)?; }