Use .as_buf
Relax ~str to &str in shader_source
Move most of shader_source out of unsafe{}
Replace destroy with std drop
Use as_mut_ptr