2021-10-18 21:13:32 +00:00
|
|
|
//! [`egui`] bindings for [`glow`](https://github.com/grovesNL/glow).
|
|
|
|
//!
|
2022-04-29 06:17:49 +00:00
|
|
|
//! The main types you want to look are are [`Painter`] and [`EguiGlow`].
|
2021-10-18 21:13:32 +00:00
|
|
|
//!
|
|
|
|
//! If you are writing an app, you may want to look at [`eframe`](https://docs.rs/eframe) instead.
|
|
|
|
|
|
|
|
#![allow(clippy::float_cmp)]
|
|
|
|
#![allow(clippy::manual_range_contains)]
|
|
|
|
|
2021-11-03 18:17:07 +00:00
|
|
|
pub mod painter;
|
|
|
|
pub use glow;
|
2021-10-18 21:13:32 +00:00
|
|
|
pub use painter::Painter;
|
2021-11-03 18:17:07 +00:00
|
|
|
mod misc_util;
|
|
|
|
mod post_process;
|
|
|
|
mod shader_version;
|
2022-03-22 15:04:06 +00:00
|
|
|
mod vao;
|
2021-10-18 21:13:32 +00:00
|
|
|
|
2022-03-07 09:48:40 +00:00
|
|
|
#[cfg(all(not(target_arch = "wasm32"), feature = "winit"))]
|
|
|
|
pub mod winit;
|
|
|
|
#[cfg(all(not(target_arch = "wasm32"), feature = "winit"))]
|
|
|
|
pub use winit::*;
|
2021-11-03 18:35:20 +00:00
|
|
|
|
2022-03-22 15:04:06 +00:00
|
|
|
/// Check for OpenGL error and report it using `tracing::error`.
|
|
|
|
///
|
2022-05-05 21:17:33 +00:00
|
|
|
/// Only active in debug builds!
|
|
|
|
///
|
2022-03-22 15:04:06 +00:00
|
|
|
/// ``` no_run
|
|
|
|
/// # let glow_context = todo!();
|
|
|
|
/// use egui_glow::check_for_gl_error;
|
|
|
|
/// check_for_gl_error!(glow_context);
|
|
|
|
/// check_for_gl_error!(glow_context, "during painting");
|
|
|
|
/// ```
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! check_for_gl_error {
|
2022-05-05 21:17:33 +00:00
|
|
|
($gl: expr) => {{
|
|
|
|
if cfg!(debug_assertions) {
|
|
|
|
$crate::check_for_gl_error_impl($gl, file!(), line!(), "")
|
|
|
|
}
|
|
|
|
}};
|
|
|
|
($gl: expr, $context: literal) => {{
|
|
|
|
if cfg!(debug_assertions) {
|
|
|
|
$crate::check_for_gl_error_impl($gl, file!(), line!(), $context)
|
|
|
|
}
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Check for OpenGL error and report it using `tracing::error`.
|
|
|
|
///
|
|
|
|
/// WARNING: slow! Only use during setup!
|
|
|
|
///
|
|
|
|
/// ``` no_run
|
|
|
|
/// # let glow_context = todo!();
|
|
|
|
/// use egui_glow::check_for_gl_error_even_in_release;
|
|
|
|
/// check_for_gl_error_even_in_release!(glow_context);
|
|
|
|
/// check_for_gl_error_even_in_release!(glow_context, "during painting");
|
|
|
|
/// ```
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! check_for_gl_error_even_in_release {
|
2022-03-22 15:04:06 +00:00
|
|
|
($gl: expr) => {{
|
|
|
|
$crate::check_for_gl_error_impl($gl, file!(), line!(), "")
|
|
|
|
}};
|
|
|
|
($gl: expr, $context: literal) => {{
|
|
|
|
$crate::check_for_gl_error_impl($gl, file!(), line!(), $context)
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[doc(hidden)]
|
|
|
|
pub fn check_for_gl_error_impl(gl: &glow::Context, file: &str, line: u32, context: &str) {
|
|
|
|
use glow::HasContext as _;
|
|
|
|
#[allow(unsafe_code)]
|
|
|
|
let error_code = unsafe { gl.get_error() };
|
|
|
|
if error_code != glow::NO_ERROR {
|
|
|
|
let error_str = match error_code {
|
|
|
|
glow::INVALID_ENUM => "GL_INVALID_ENUM",
|
|
|
|
glow::INVALID_VALUE => "GL_INVALID_VALUE",
|
|
|
|
glow::INVALID_OPERATION => "GL_INVALID_OPERATION",
|
|
|
|
glow::STACK_OVERFLOW => "GL_STACK_OVERFLOW",
|
|
|
|
glow::STACK_UNDERFLOW => "GL_STACK_UNDERFLOW",
|
|
|
|
glow::OUT_OF_MEMORY => "GL_OUT_OF_MEMORY",
|
|
|
|
glow::INVALID_FRAMEBUFFER_OPERATION => "GL_INVALID_FRAMEBUFFER_OPERATION",
|
|
|
|
glow::CONTEXT_LOST => "GL_CONTEXT_LOST",
|
|
|
|
0x8031 => "GL_TABLE_TOO_LARGE1",
|
|
|
|
0x9242 => "CONTEXT_LOST_WEBGL",
|
|
|
|
_ => "<unknown>",
|
|
|
|
};
|
|
|
|
|
|
|
|
if context.is_empty() {
|
|
|
|
tracing::error!(
|
|
|
|
"GL error, at {}:{}: {} (0x{:X}). Please file a bug at https://github.com/emilk/egui/issues",
|
|
|
|
file,
|
|
|
|
line,
|
|
|
|
error_str,
|
|
|
|
error_code,
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
tracing::error!(
|
|
|
|
"GL error, at {}:{} ({}): {} (0x{:X}). Please file a bug at https://github.com/emilk/egui/issues",
|
|
|
|
file,
|
|
|
|
line,
|
|
|
|
context,
|
|
|
|
error_str,
|
|
|
|
error_code,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-04-13 09:06:13 +00:00
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/// Profiling macro for feature "puffin"
|
|
|
|
macro_rules! profile_function {
|
|
|
|
($($arg: tt)*) => {
|
|
|
|
#[cfg(feature = "puffin")]
|
2022-04-30 08:44:35 +00:00
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
2022-04-13 09:06:13 +00:00
|
|
|
puffin::profile_function!($($arg)*);
|
|
|
|
};
|
|
|
|
}
|
2022-04-25 20:01:32 +00:00
|
|
|
pub(crate) use profile_function;
|
2022-04-13 09:06:13 +00:00
|
|
|
|
|
|
|
/// Profiling macro for feature "puffin"
|
|
|
|
macro_rules! profile_scope {
|
|
|
|
($($arg: tt)*) => {
|
|
|
|
#[cfg(feature = "puffin")]
|
2022-04-30 08:44:35 +00:00
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
2022-04-13 09:06:13 +00:00
|
|
|
puffin::profile_scope!($($arg)*);
|
|
|
|
};
|
|
|
|
}
|
2022-04-25 20:01:32 +00:00
|
|
|
pub(crate) use profile_scope;
|