grafix_toolbox/kit/opengl/
utility.rs

1pub use {font::*, image::*, pbrt::*, pyramid::*, sdf::*};
2
3pub enum DebugLevel {
4	High = 0,
5	Medium = 1,
6	Low = 2,
7	All = 3,
8}
9
10pub fn EnableDebugContext(level: DebugLevel) {
11	static mut FILTER: u32 = 0;
12	unsafe {
13		FILTER = level as u32;
14	}
15	GLEnable!(DEBUG_OUTPUT, DEBUG_OUTPUT_SYNCHRONOUS);
16	GL!(gl::DebugMessageCallback(Some(debug_gl_printer), &raw const FILTER as *const GLvoid));
17}
18
19extern "system" fn debug_gl_printer(src: GLenum, typ: GLenum, id: u32, lvl: GLenum, _: i32, msg: *const i8, filter: *mut GLvoid) {
20	let f = unsafe { *(filter as *mut u32) };
21	let lvl = match lvl {
22		gl::DEBUG_SEVERITY_HIGH => "HIG".into(),
23		gl::DEBUG_SEVERITY_MEDIUM if f > 0 => "MED".into(),
24		gl::DEBUG_SEVERITY_LOW if f > 1 => "LOW".into(),
25		gl::DEBUG_SEVERITY_NOTIFICATION if f > 2 => "TIP".into(),
26		gl::DEBUG_SEVERITY_MEDIUM | gl::DEBUG_SEVERITY_LOW | gl::DEBUG_SEVERITY_NOTIFICATION => return (),
27		_ => format!("SEVERITY_?_{lvl}"),
28	};
29
30	let src = match src {
31		gl::DEBUG_SOURCE_API => "SOURCE_API".into(),
32		gl::DEBUG_SOURCE_WINDOW_SYSTEM => "SOURCE_WINDOW_SYSTEM".into(),
33		gl::DEBUG_SOURCE_SHADER_COMPILER => "SOURCE_SHADER_COMPILER".into(),
34		gl::DEBUG_SOURCE_THIRD_PARTY => "SOURCE_THIRD_PARTY".into(),
35		gl::DEBUG_SOURCE_APPLICATION => "SOURCE_APPLICATION".into(),
36		gl::DEBUG_SOURCE_OTHER => "SOURCE_OTHER".into(),
37		_ => format!("SOURCE_?_{src}"),
38	};
39
40	let typ = match typ {
41		gl::DEBUG_TYPE_ERROR => "TYPE_ERROR".into(),
42		gl::DEBUG_TYPE_DEPRECATED_BEHAVIOR => "TYPE_DEPRECATED_BEHAVIOR".into(),
43		gl::DEBUG_TYPE_UNDEFINED_BEHAVIOR => "TYPE_UNDEFINED_BEHAVIOR".into(),
44		gl::DEBUG_TYPE_PORTABILITY => "TYPE_PORTABILITY".into(),
45		gl::DEBUG_TYPE_PERFORMANCE => "TYPE_PERFORMANCE".into(),
46		gl::DEBUG_TYPE_MARKER => "TYPE_MARKER".into(),
47		gl::DEBUG_TYPE_PUSH_GROUP => "TYPE_PUSH_GROUP".into(),
48		gl::DEBUG_TYPE_POP_GROUP => "TYPE_POP_GROUP".into(),
49		gl::DEBUG_TYPE_OTHER => "TYPE_OTHER".into(),
50		_ => format!("TYPE_?_{typ}"),
51	};
52
53	WARN!("GLDBG_{id}, {lvl}: {typ} {src} {:?}", unsafe { std::ffi::CStr::from_ptr(msg) });
54}
55
56mod font;
57mod image;
58mod pbrt;
59mod pingpong;
60mod pyramid;
61mod sdf;
62
63use crate::lib::*;