pub trait DynSurface: DynResource {
    // Required methods
    unsafe fn configure(
        &self,
        device: &dyn DynDevice,
        config: &SurfaceConfiguration,
    ) -> Result<(), SurfaceError>;
    unsafe fn unconfigure(&self, device: &dyn DynDevice);
    unsafe fn acquire_texture(
        &self,
        timeout: Option<Duration>,
        fence: &dyn DynFence,
    ) -> Result<Option<DynAcquiredSurfaceTexture>, SurfaceError>;
    unsafe fn discard_texture(&self, texture: Box<dyn DynSurfaceTexture>);
}