use crate::context::ContextID;
use crate::gl::types::GLuint;
use euclid::default::Size2D;
use std::fmt::{self, Display, Formatter};
pub struct SystemSurfaceInfo {
pub size: Size2D<i32>,
pub id: SurfaceID,
}
pub struct SurfaceInfo {
pub size: Size2D<i32>,
pub id: SurfaceID,
pub context_id: ContextID,
pub framebuffer_object: GLuint,
}
#[allow(dead_code)]
pub(crate) enum Framebuffer<S, E> {
None,
External(E),
Surface(S),
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct SurfaceID(pub usize);
impl Display for SurfaceID {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(f, "{:?}", *self)
}
}
#[derive(Clone, Copy, PartialEq, Debug)]
pub enum SurfaceAccess {
GPUOnly,
GPUCPU,
GPUCPUWriteCombined,
}
pub enum SurfaceType<NativeWidget> {
Generic {
size: Size2D<i32>
},
Widget {
native_widget: NativeWidget,
},
}
impl SurfaceAccess {
#[allow(dead_code)]
#[inline]
pub(crate) fn cpu_access_allowed(self) -> bool {
match self {
SurfaceAccess::GPUOnly => false,
SurfaceAccess::GPUCPU | SurfaceAccess::GPUCPUWriteCombined => true,
}
}
}