egl: Pass clonable display handle to native-impls

This commit is contained in:
Victor Brekenfeld 2020-05-18 20:19:42 +02:00
parent cc6e3569f0
commit 73447bd668
3 changed files with 8 additions and 6 deletions

View File

@ -17,6 +17,7 @@ use drm::control::{connector, crtc, Device as ControlDevice, Mode};
use gbm::AsRaw; use gbm::AsRaw;
use nix::libc::{c_int, c_void}; use nix::libc::{c_int, c_void};
use std::marker::PhantomData; use std::marker::PhantomData;
use std::sync::Arc;
/// Egl Gbm backend type /// Egl Gbm backend type
/// ///
@ -89,7 +90,7 @@ unsafe impl<D: RawDevice + 'static> NativeSurface for GbmSurface<D> {
unsafe fn create( unsafe fn create(
&self, &self,
display: &EGLDisplayHandle, display: &Arc<EGLDisplayHandle>,
config_id: ffi::egl::types::EGLConfig, config_id: ffi::egl::types::EGLConfig,
surface_attributes: &[c_int], surface_attributes: &[c_int],
) -> Result<*const c_void, SurfaceCreationError<Self::Error>> { ) -> Result<*const c_void, SurfaceCreationError<Self::Error>> {

View File

@ -4,6 +4,7 @@ use super::{
display::EGLDisplayHandle, ffi, wrap_egl_call, EGLError, Error, SurfaceCreationError, SwapBuffersError, display::EGLDisplayHandle, ffi, wrap_egl_call, EGLError, Error, SurfaceCreationError, SwapBuffersError,
}; };
use nix::libc::{c_int, c_void}; use nix::libc::{c_int, c_void};
use std::sync::Arc;
#[cfg(feature = "backend_winit")] #[cfg(feature = "backend_winit")]
use wayland_egl as wegl; use wayland_egl as wegl;
@ -211,7 +212,7 @@ pub unsafe trait NativeSurface {
/// This is usually an unsafe operation returning a raw pointer. /// This is usually an unsafe operation returning a raw pointer.
unsafe fn create( unsafe fn create(
&self, &self,
display: &EGLDisplayHandle, display: &Arc<EGLDisplayHandle>,
config_id: ffi::egl::types::EGLConfig, config_id: ffi::egl::types::EGLConfig,
surface_attributes: &[c_int], surface_attributes: &[c_int],
) -> Result<*const c_void, SurfaceCreationError<Self::Error>>; ) -> Result<*const c_void, SurfaceCreationError<Self::Error>>;
@ -248,7 +249,7 @@ unsafe impl NativeSurface for XlibWindow {
unsafe fn create( unsafe fn create(
&self, &self,
display: &EGLDisplayHandle, display: &Arc<EGLDisplayHandle>,
config_id: ffi::egl::types::EGLConfig, config_id: ffi::egl::types::EGLConfig,
surface_attributes: &[c_int], surface_attributes: &[c_int],
) -> Result<*const c_void, SurfaceCreationError<Error>> { ) -> Result<*const c_void, SurfaceCreationError<Error>> {
@ -270,7 +271,7 @@ unsafe impl NativeSurface for wegl::WlEglSurface {
unsafe fn create( unsafe fn create(
&self, &self,
display: &EGLDisplayHandle, display: &Arc<EGLDisplayHandle>,
config_id: ffi::egl::types::EGLConfig, config_id: ffi::egl::types::EGLConfig,
surface_attributes: &[c_int], surface_attributes: &[c_int],
) -> Result<*const c_void, SurfaceCreationError<Error>> { ) -> Result<*const c_void, SurfaceCreationError<Error>> {

View File

@ -69,7 +69,7 @@ impl<N: native::NativeSurface> EGLSurface<N> {
out out
}; };
let surface = unsafe { native.create(&*display, config, &surface_attributes)? }; let surface = unsafe { native.create(&display, config, &surface_attributes)? };
if surface == ffi::egl::NO_SURFACE { if surface == ffi::egl::NO_SURFACE {
return Err(SurfaceCreationError::EGLSurfaceCreationFailed( return Err(SurfaceCreationError::EGLSurfaceCreationFailed(
@ -111,7 +111,7 @@ impl<N: native::NativeSurface> EGLSurface<N> {
} }
self.surface.set(unsafe { self.surface.set(unsafe {
self.native self.native
.create(&*self.display, self.config_id, &self.surface_attributes) .create(&self.display, self.config_id, &self.surface_attributes)
.map_err(|err| match err { .map_err(|err| match err {
SurfaceCreationError::EGLSurfaceCreationFailed(err) => { SurfaceCreationError::EGLSurfaceCreationFailed(err) => {
SwapBuffersError::EGLCreateWindowSurface(err) SwapBuffersError::EGLCreateWindowSurface(err)