use crate::{get_context, get_quad_context};
use crate::color::Color;
pub use miniquad;
pub use miniquad::conf::Conf;
pub fn next_frame() -> crate::exec::FrameFuture {
crate::thread_assert::same_thread();
crate::exec::FrameFuture::default()
}
pub fn clear_background(color: Color) {
let context = get_context();
context.gl.clear(get_quad_context(), color);
}
#[doc(hidden)]
pub fn gl_set_drawcall_buffer_capacity(max_vertices: usize, max_indices: usize) {
let context = get_context();
context
.gl
.update_drawcall_capacity(get_quad_context(), max_vertices, max_indices);
}
pub struct InternalGlContext<'a> {
pub quad_context: &'a mut dyn miniquad::RenderingBackend,
pub quad_gl: &'a mut crate::quad_gl::QuadGl,
}
impl<'a> InternalGlContext<'a> {
pub fn flush(&mut self) {
get_context().perform_render_passes();
}
}
pub unsafe fn get_internal_gl<'a>() -> InternalGlContext<'a> {
let context = get_context();
InternalGlContext {
quad_context: get_quad_context(),
quad_gl: &mut context.gl,
}
}
pub fn screen_width() -> f32 {
let context = get_context();
context.screen_width / miniquad::window::dpi_scale()
}
pub fn screen_height() -> f32 {
let context = get_context();
context.screen_height / miniquad::window::dpi_scale()
}
pub fn screen_dpi_scale() -> f32 {
miniquad::window::dpi_scale()
}
pub fn request_new_screen_size(width: f32, height: f32) {
miniquad::window::set_window_size(
(width * miniquad::window::dpi_scale()) as u32,
(height * miniquad::window::dpi_scale()) as u32,
);
}
pub fn set_fullscreen(fullscreen: bool) {
miniquad::window::set_fullscreen(fullscreen);
}
pub fn set_panic_handler<T, F>(future: F)
where
T: std::future::Future<Output = ()> + 'static,
F: Fn(String, String) -> T + Send + Sync + 'static,
{
std::panic::set_hook(Box::new(move |info| {
let message = format!("{info:?}");
#[cfg(feature = "backtrace")]
let backtrace_string = format!("{:?}", backtrace::Backtrace::new());
#[cfg(not(feature = "backtrace"))]
let backtrace_string = format!("Macroquad compiled without \"backtrace\" feature");
crate::logging::error!("{}", message);
crate::logging::error!("{}", backtrace_string);
crate::get_context().recovery_future = Some(Box::pin(future(message, backtrace_string)));
}));
crate::get_context().unwind = true;
}