Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android support for EFrame #1952

Merged
merged 2 commits into from
Aug 23, 2022
Merged

Android support for EFrame #1952

merged 2 commits into from
Aug 23, 2022

Commits on Aug 21, 2022

  1. eframe: allow hooking into EventLoop building

    This enables native applications to add an `event_loop_builder` callback
    to the `NativeOptions` struct that lets them modify the Winit
    `EventLoopBuilder` before the final `EventLoop` is built and run.
    
    This makes it practical for applications to change platform
    specific config options that Egui doesn't need to be directly aware of.
    
    For example the `android-activity` glue crate that supports writing
    Android applications in Rust requires that the Winit event loop be
    passed a reference to the `AndroidApp` that is given to the
    `android_main` entrypoint for the application.
    
    Since the `AndroidApp` itself is abstracted by Winit then there's no
    real need for Egui/EFrame to have a dependency on the `android-activity`
    crate just for the sake of associating this state with the event loop.
    
    Addresses: emilk#1951
    rib committed Aug 21, 2022
    Configuration menu
    Copy the full SHA
    6ff1019 View commit details
    Browse the repository at this point in the history
  2. eframe: defer graphics state initialization until app Resumed

    Conceptually the Winit `Resumed` event signifies that the application is
    ready to run and render and since
    rust-windowing/winit#2331 all platforms now
    consistently emit a Resumed event that can be used to initialize
    graphics state for an application.
    
    On Android in particular it's important to wait until the application
    has Resumed before initializing graphics state since it won't have an
    associated SurfaceView while paused.
    
    Without this change then Android applications are likely to just show
    a black screen.
    
    This updates the Wgpu+Winit and Glow+Winit integration for eframe but
    it's worth noting that the Glow integration is still not able to fully
    support suspend and resume on Android due to limitations with Glutin's
    API that mean we can't destroy and create a Window without also
    destroying the GL context, and therefore (practically) the entire
    application.
    
    There is a plan (and progress on) to improve the Glutin API here:
    rust-windowing/glutin#1435 and with that change
    it should be an incremental change to enable Android suspend/resume
    support with Glow later.
    
    In the mean time the Glow changes keep the implementation consistent
    with the wgpu integration and it should now at least be possible to
    start an Android application - even though it won't be able to suspend
    correctly.
    
    Fixes emilk#1951
    rib committed Aug 21, 2022
    Configuration menu
    Copy the full SHA
    a6c8e1e View commit details
    Browse the repository at this point in the history