use crate::gl_version::OpenGlVersion;
use crate::renderer::Renderer;
#[cfg(feature = "text")]
use crate::text::TextRenderer;
pub struct Context {
pub(crate) renderer: Renderer,
#[cfg(feature = "text")]
pub(crate) text_renderers: Vec<TextRenderer>,
}
impl Context {
pub fn new() -> Context {
Context {
renderer: Renderer::new(),
#[cfg(feature = "text")]
text_renderers: Vec::new(),
}
}
pub fn is_legacy(&self) -> bool {
self.renderer.legacy
}
pub fn get_opengl_version(&self) -> &OpenGlVersion {
&self.renderer.version
}
pub fn synchronize(&mut self) {
self.renderer.synchronize();
}
pub fn start_frame(&mut self, width: f32, height: f32, dpi_factor: f32) -> GraphicsContext {
self.renderer.prepare_new_frame(dpi_factor);
#[cfg(feature = "text")]
for font in &mut self.text_renderers {
font.prepare_new_frame(&mut self.renderer, dpi_factor, width, height);
}
GraphicsContext {
renderer: &mut self.renderer,
#[cfg(feature = "text")]
text_renderers: &mut self.text_renderers,
width,
height,
dpi_factor,
}
}
pub fn render(&mut self, width: f32, height: f32, clear_color: (f32, f32, f32, f32)) {
self.renderer.render(width, height, clear_color);
}
}
pub struct GraphicsContext<'a> {
pub(crate) renderer: &'a mut Renderer,
#[cfg(feature = "text")]
pub(crate) text_renderers: &'a mut Vec<TextRenderer>,
pub width: f32,
pub height: f32,
pub dpi_factor: f32,
}
impl GraphicsContext<'_> {
pub fn finish_frame(self) {
#[cfg(feature = "text")]
for font in self.text_renderers {
font.compose_draw_call(self.renderer);
}
self.renderer.finish_frame();
}
}