Change `Arc<glow::Context>` to `Rc<glow::Context>` (#3598)
This is required for Rust 1.72 (for unknown reasons; see https://github.com/emilk/egui/pull/3595), but also for updating to glow 0.13, where the `glow::Context` is not longer `Sync+Send`
This commit is contained in:
parent
e823491240
commit
7abf8afd16
|
|
@ -64,7 +64,7 @@ pub struct CreationContext<'s> {
|
||||||
///
|
///
|
||||||
/// Only available when compiling with the `glow` feature and using [`Renderer::Glow`].
|
/// Only available when compiling with the `glow` feature and using [`Renderer::Glow`].
|
||||||
#[cfg(feature = "glow")]
|
#[cfg(feature = "glow")]
|
||||||
pub gl: Option<std::sync::Arc<glow::Context>>,
|
pub gl: Option<std::rc::Rc<glow::Context>>,
|
||||||
|
|
||||||
/// The underlying WGPU render state.
|
/// The underlying WGPU render state.
|
||||||
///
|
///
|
||||||
|
|
@ -602,7 +602,7 @@ pub struct Frame {
|
||||||
|
|
||||||
/// A reference to the underlying [`glow`] (OpenGL) context.
|
/// A reference to the underlying [`glow`] (OpenGL) context.
|
||||||
#[cfg(feature = "glow")]
|
#[cfg(feature = "glow")]
|
||||||
pub(crate) gl: Option<std::sync::Arc<glow::Context>>,
|
pub(crate) gl: Option<std::rc::Rc<glow::Context>>,
|
||||||
|
|
||||||
/// Can be used to manage GPU resources for custom rendering with WGPU using [`egui::PaintCallback`]s.
|
/// Can be used to manage GPU resources for custom rendering with WGPU using [`egui::PaintCallback`]s.
|
||||||
#[cfg(feature = "wgpu")]
|
#[cfg(feature = "wgpu")]
|
||||||
|
|
@ -674,7 +674,7 @@ impl Frame {
|
||||||
/// To get a [`glow`] context you need to compile with the `glow` feature flag,
|
/// To get a [`glow`] context you need to compile with the `glow` feature flag,
|
||||||
/// and run eframe using [`Renderer::Glow`].
|
/// and run eframe using [`Renderer::Glow`].
|
||||||
#[cfg(feature = "glow")]
|
#[cfg(feature = "glow")]
|
||||||
pub fn gl(&self) -> Option<&std::sync::Arc<glow::Context>> {
|
pub fn gl(&self) -> Option<&std::rc::Rc<glow::Context>> {
|
||||||
self.gl.as_ref()
|
self.gl.as_ref()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ impl EpiIntegration {
|
||||||
native_options: &crate::NativeOptions,
|
native_options: &crate::NativeOptions,
|
||||||
storage: Option<Box<dyn epi::Storage>>,
|
storage: Option<Box<dyn epi::Storage>>,
|
||||||
is_desktop: bool,
|
is_desktop: bool,
|
||||||
#[cfg(feature = "glow")] gl: Option<std::sync::Arc<glow::Context>>,
|
#[cfg(feature = "glow")] gl: Option<std::rc::Rc<glow::Context>>,
|
||||||
#[cfg(feature = "wgpu")] wgpu_render_state: Option<egui_wgpu::RenderState>,
|
#[cfg(feature = "wgpu")] wgpu_render_state: Option<egui_wgpu::RenderState>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let egui_ctx = egui::Context::default();
|
let egui_ctx = egui::Context::default();
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,7 @@ impl GlowWinitApp {
|
||||||
|
|
||||||
let gl = unsafe {
|
let gl = unsafe {
|
||||||
crate::profile_scope!("glow::Context::from_loader_function");
|
crate::profile_scope!("glow::Context::from_loader_function");
|
||||||
Arc::new(glow::Context::from_loader_function(|s| {
|
Rc::new(glow::Context::from_loader_function(|s| {
|
||||||
let s = std::ffi::CString::new(s)
|
let s = std::ffi::CString::new(s)
|
||||||
.expect("failed to construct C string from string for gl proc address");
|
.expect("failed to construct C string from string for gl proc address");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ pub(crate) struct WebPainterGlow {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebPainterGlow {
|
impl WebPainterGlow {
|
||||||
pub fn gl(&self) -> &std::sync::Arc<glow::Context> {
|
pub fn gl(&self) -> &std::rc::Rc<glow::Context> {
|
||||||
self.painter.gl()
|
self.painter.gl()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -24,7 +24,7 @@ impl WebPainterGlow {
|
||||||
|
|
||||||
let (gl, shader_prefix) =
|
let (gl, shader_prefix) =
|
||||||
init_glow_context_from_canvas(&canvas, options.webgl_context_option)?;
|
init_glow_context_from_canvas(&canvas, options.webgl_context_option)?;
|
||||||
let gl = std::sync::Arc::new(gl);
|
let gl = std::rc::Rc::new(gl);
|
||||||
|
|
||||||
let painter = egui_glow::Painter::new(gl, shader_prefix, None)
|
let painter = egui_glow::Painter::new(gl, shader_prefix, None)
|
||||||
.map_err(|err| format!("Error starting glow painter: {err}"))?;
|
.map_err(|err| format!("Error starting glow painter: {err}"))?;
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ fn main() {
|
||||||
|
|
||||||
let event_loop = winit::event_loop::EventLoopBuilder::<UserEvent>::with_user_event().build();
|
let event_loop = winit::event_loop::EventLoopBuilder::<UserEvent>::with_user_event().build();
|
||||||
let (gl_window, gl) = create_display(&event_loop);
|
let (gl_window, gl) = create_display(&event_loop);
|
||||||
let gl = std::sync::Arc::new(gl);
|
let gl = std::rc::Rc::new(gl);
|
||||||
|
|
||||||
let mut egui_glow = egui_glow::EguiGlow::new(&event_loop, gl.clone(), None, None);
|
let mut egui_glow = egui_glow::EguiGlow::new(&event_loop, gl.clone(), None, None);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#![allow(clippy::collapsible_else_if)]
|
#![allow(clippy::collapsible_else_if)]
|
||||||
#![allow(unsafe_code)]
|
#![allow(unsafe_code)]
|
||||||
|
|
||||||
use std::{collections::HashMap, sync::Arc};
|
use std::{collections::HashMap, rc::Rc};
|
||||||
|
|
||||||
use egui::{
|
use egui::{
|
||||||
emath::Rect,
|
emath::Rect,
|
||||||
|
|
@ -60,7 +60,7 @@ impl From<String> for PainterError {
|
||||||
/// This struct must be destroyed with [`Painter::destroy`] before dropping, to ensure OpenGL
|
/// This struct must be destroyed with [`Painter::destroy`] before dropping, to ensure OpenGL
|
||||||
/// objects have been properly deleted and are not leaked.
|
/// objects have been properly deleted and are not leaked.
|
||||||
pub struct Painter {
|
pub struct Painter {
|
||||||
gl: Arc<glow::Context>,
|
gl: Rc<glow::Context>,
|
||||||
|
|
||||||
max_texture_side: usize,
|
max_texture_side: usize,
|
||||||
|
|
||||||
|
|
@ -118,7 +118,7 @@ impl Painter {
|
||||||
/// * failed to create postprocess on webgl with `sRGB` support
|
/// * failed to create postprocess on webgl with `sRGB` support
|
||||||
/// * failed to create buffer
|
/// * failed to create buffer
|
||||||
pub fn new(
|
pub fn new(
|
||||||
gl: Arc<glow::Context>,
|
gl: Rc<glow::Context>,
|
||||||
shader_prefix: &str,
|
shader_prefix: &str,
|
||||||
shader_version: Option<ShaderVersion>,
|
shader_version: Option<ShaderVersion>,
|
||||||
) -> Result<Painter, PainterError> {
|
) -> Result<Painter, PainterError> {
|
||||||
|
|
@ -248,7 +248,7 @@ impl Painter {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Access the shared glow context.
|
/// Access the shared glow context.
|
||||||
pub fn gl(&self) -> &Arc<glow::Context> {
|
pub fn gl(&self) -> &Rc<glow::Context> {
|
||||||
&self.gl
|
&self.gl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ impl EguiGlow {
|
||||||
/// For automatic shader version detection set `shader_version` to `None`.
|
/// For automatic shader version detection set `shader_version` to `None`.
|
||||||
pub fn new<E>(
|
pub fn new<E>(
|
||||||
event_loop: &winit::event_loop::EventLoopWindowTarget<E>,
|
event_loop: &winit::event_loop::EventLoopWindowTarget<E>,
|
||||||
gl: std::sync::Arc<glow::Context>,
|
gl: std::rc::Rc<glow::Context>,
|
||||||
shader_version: Option<ShaderVersion>,
|
shader_version: Option<ShaderVersion>,
|
||||||
native_pixels_per_point: Option<f32>,
|
native_pixels_per_point: Option<f32>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue