grafix_toolbox/kit/opengl/
control.rs

1#[cfg(not(debug_assertions))]
2#[macro_export]
3macro_rules! GL {
4	($fun: expr) => {{
5		#[allow(clippy::macro_metavars_in_unsafe, unused_unsafe)]
6		unsafe {
7			$fun
8		}
9	}};
10}
11
12#[cfg(debug_assertions)]
13#[macro_export]
14macro_rules! GL {
15	($fun: expr) => {{
16		ASSERT!($crate::GL::macro_uses::gl_was_initialized(false), "Opengl wasn't initialized on this thread");
17
18		fn code_to_error(code: gl::types::GLenum) -> String {
19			match code {
20				gl::INVALID_ENUM => "GL_INVALID_ENUM".into(),
21				gl::INVALID_VALUE => "GL_INVALID_VALUE".into(),
22				gl::INVALID_OPERATION => "GL_INVALID_OPERATION".into(),
23				gl::STACK_OVERFLOW => "GL_STACK_OVERFLOW".into(),
24				gl::STACK_UNDERFLOW => "GL_STACK_UNDERFLOW".into(),
25				gl::OUT_OF_MEMORY => "GL_OUT_OF_MEMORY".into(),
26				gl::INVALID_FRAMEBUFFER_OPERATION => "GL_INVALID_FRAMEBUFFER_OPERATION".into(),
27				gl::CONTEXT_LOST => "GL_CONTEXT_LOST".into(),
28				_ => format!("GL_?_{code}"),
29			}
30		}
31
32		#[allow(clippy::macro_metavars_in_unsafe)]
33		let (val, err) = unsafe { ($fun, gl::GetError()) };
34		if err != gl::NO_ERROR {
35			FAIL!("OpenGL error {} in {}", code_to_error(err), stringify!($fun));
36		}
37		val
38	}};
39}
40
41pub mod universion;
42
43#[macro_use]
44pub mod consts;
45#[macro_use]
46pub mod funcs;
47
48pub mod object;
49pub mod policy;
50pub mod state;
51pub mod tex_state;
52pub mod uniform_state;
53
54pub fn gl_was_initialized(set: bool) -> bool {
55	*LocalStatic!(bool, { set })
56}