Skip to content

filamentapp: add HeadlessDisplayManager - #10444

Open
poweifeng wants to merge 3 commits into
mainfrom
pf/filamentapp2-headless
Open

poweifeng wants to merge 3 commits into
mainfrom
pf/filamentapp2-headless

Conversation

@poweifeng

@poweifeng poweifeng commented Sep 17, 2026

Copy link
Copy Markdown
Contributor
  • Add HeadlessDisplayManager: offscreen windows, scripted input, and a
    synthetic clock for deterministic testing.
  • Replace the headless flag in Config, FilamentApp2::Builder and
    createWindow() with DisplayManager::isHeadless().
  • Add DisplayManager::runFrameLoop() so the frame loop, and with it
    frame pacing, belongs to the display manager. The default is a
    blocking loop paced to roughly 60Hz; headless runs unpaced. A manager
    whose frames are delivered by an external source can instead register
    itself and return.
  • FilamentApp2::run() delegates to it and no longer calls shutdown():
    doFrame() already does so before reporting completion, and
    runFrameLoop() may return while the app is still running.
  • FilamentApp::run() honors the deprecated Config::headless and falls
    back to headless when the requested manager is unavailable.
  • Remove Android headless support; AndroidDisplayManager always returns
    its SurfaceView.
  • Remove unreachable display manager null checks in FilamentApp2.
  • SDLDisplayManager is now never headless

@poweifeng poweifeng added the internal Issue/PR does not affect clients label Sep 17, 2026
@poweifeng
poweifeng force-pushed the pf/filamentapp2-headless branch 3 times, most recently from 7de7e62 to 479a60a Compare September 18, 2026 07:07
- Add HeadlessDisplayManager: offscreen windows, scripted input, and a
  synthetic clock for deterministic testing.
- Replace the headless flag in Config, FilamentApp2::Builder and
  createWindow() with DisplayManager::isHeadless().
- Add DisplayManager::runFrameLoop() so the frame loop, and with it
  frame pacing, belongs to the display manager. The default is a
  blocking loop paced to roughly 60Hz; headless runs unpaced. A manager
  whose frames are delivered by an external source can instead register
  itself and return.
- FilamentApp2::run() delegates to it and no longer calls shutdown():
  doFrame() already does so before reporting completion, and
  runFrameLoop() may return while the app is still running.
- FilamentApp::run() honors the deprecated Config::headless and falls
  back to headless when the requested manager is unavailable.
- Remove Android headless support; AndroidDisplayManager always returns
  its SurfaceView.
- Remove unreachable display manager null checks in FilamentApp2.
- SDLDisplayManager is now never headless
@poweifeng
poweifeng force-pushed the pf/filamentapp2-headless branch from 479a60a to 49f71ef Compare September 18, 2026 07:18

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal Issue/PR does not affect clients

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant