(
gl: &Context,
vs_file: &str,
fs_file: &str,
error_flag: &Arc<AtomicBool>,
error_msg: &Arc<Mutex<String>>
)
| 194 | |
| 195 | |
| 196 | fn create_glsl_program( |
| 197 | gl: &Context, |
| 198 | vs_file: &str, |
| 199 | fs_file: &str, |
| 200 | error_flag: &Arc<AtomicBool>, |
| 201 | error_msg: &Arc<Mutex<String>> |
| 202 | ) -> context::Program { |
| 203 | unsafe { |
| 204 | let vert_shader = gl.create_shader(context::VERTEX_SHADER) |
| 205 | .expect("Failed creating vertex shader"); |
| 206 | let frag_shader = gl.create_shader(context::FRAGMENT_SHADER) |
| 207 | .expect("Failed creating fragment shader"); |
| 208 | |
| 209 | gl.shader_source(vert_shader, vs_file); |
| 210 | gl.shader_source(frag_shader, fs_file); |
| 211 | gl.compile_shader(vert_shader); |
| 212 | gl.compile_shader(frag_shader); |
| 213 | |
| 214 | let id = gl.create_program() |
| 215 | .expect("Failed creating program"); |
| 216 | |
| 217 | gl.attach_shader(id, vert_shader); |
| 218 | gl.attach_shader(id, frag_shader); |
| 219 | gl.link_program(id); |
| 220 | |
| 221 | if !gl.get_program_link_status(id) { |
| 222 | let log = gl.get_shader_info_log(vert_shader); |
| 223 | if !log.is_empty() { |
| 224 | set_error_for_egui( |
| 225 | error_flag, error_msg, |
| 226 | format!("ERROR: gl.get_program_link_status(): {}", log) |
| 227 | ); |
| 228 | } |
| 229 | let log = gl.get_shader_info_log(frag_shader); |
| 230 | if !log.is_empty() { |
| 231 | set_error_for_egui( |
| 232 | error_flag, error_msg, |
| 233 | format!("ERROR: gl.get_program_link_status(): {}", log) |
| 234 | ); |
| 235 | } |
| 236 | let log = gl.get_program_info_log(id); |
| 237 | if !log.is_empty() { |
| 238 | set_error_for_egui( |
| 239 | error_flag, error_msg, |
| 240 | format!("ERROR: gl.get_program_link_status(): {}", log) |
| 241 | ); |
| 242 | } |
| 243 | //unreachable!(); |
| 244 | } else { |
| 245 | gl.detach_shader(id, vert_shader); |
| 246 | gl.detach_shader(id, frag_shader); |
| 247 | gl.delete_shader(vert_shader); |
| 248 | gl.delete_shader(frag_shader); |
| 249 | } |
| 250 | |
| 251 | return id; |
| 252 | } |
| 253 | } |
no test coverage detected