Skip to content

Ferrum development journal · Part 10 of 19

Working on Presentation and Controller Input

Presentation timing and controller discovery needed tests outside a simple offscreen run. The Mac has its own window and input rules to account for.

Once a program can draw, the next thing you notice is whether its window keeps updating and whether your input reaches it. Those are user-facing behaviors, but they depend on the details of how the translated guest interacts with the Mac's display and input systems.

The presentation work in this period explored a display-linked update loop and a layer-backed view. The goal was to keep the on-screen path moving without changing the meaning of the guest's drawing operations. Offscreen comparisons were useful for catching regressions, but an offscreen test can't tell us everything about a window managed by macOS.

Controllers had a similar split between detection and actual use. Finding a device in an enumeration doesn't prove that button presses will arrive during a game session. The September 12 change enabled GameController background-event monitoring, which the driver had not been setting. The work also added a detector that looked across multiple input layers so a failure could be attributed more precisely.

For a player, the desired behavior is simple: connect a controller, focus the application as needed, and have the controls work. During development, we still need to distinguish the device being present, the input events being delivered, and the application responding. Rumble, different connection types, focus changes, and a physical-controller matrix remain their own checks.

The same caution applies to presentation. A counter can say frames are being presented while the contents of the window have stopped changing. The following development chapter uncovered exactly that kind of problem, and corrected an earlier explanation for an apparent freeze.

So I wouldn't turn this period into a claim of finished controller support or guaranteed smooth presentation. It added mechanisms and better diagnostics for behaviors that have to be tested on screen and with real devices, as part of an actual application session.

Ferrum development journal

View the journal

Live19 entries so farUpdated New (19 entries updated in the last 14 days)

  1. Part 1Bringing FEX to macOS: The First Windows ProgramDevelopment work: Aug 5 – 7, 2026Updated , new
  2. Part 2From Return Values to Pixels and SoundDevelopment work: Aug 8 – 11, 2026Updated , new
  3. Part 3Building More of the Windows RuntimeDevelopment work: Aug 12 – 18, 2026Updated , new
  4. Part 4Following a Game Through Its Opening VideoDevelopment work: Aug 19 – 20, 2026Updated , new
  5. Part 5Installers, Saves, Fonts, and the Parts Around the GameDevelopment work: Aug 21 – 22, 2026Updated , new
  6. Part 6Game Progress and Measuring the Right ThingDevelopment work: Aug 23 – 27, 2026Updated , new
  7. Part 7Building the 32-Bit Graphics PathDevelopment work: Aug 28 – Sep 1, 2026Updated , new
  8. Part 8Making Memory, Files, and Graphics State AgreeDevelopment work: Sep 2 – 3, 2026Updated , new
  9. Part 9DirectX 12, Shader Caches, and the Steam Startup WorkDevelopment work: Sep 4 – 6, 2026Updated , new
  10. Part 10Working on Presentation and Controller InputDevelopment work: Sep 7 – 12, 2026Updated , new
  11. Part 11A Launcher and a Freeze That Wasn't the PresenterDevelopment work: Sep 15 – 17, 2026Updated , new
  12. Part 12Portal Reaches a Command Stream, With the Frame Still AheadDevelopment work: Sep 23 – 26, 2026Updated , new
  13. Part 13Correcting the Ferrum Progress ReportDevelopment work: Oct 2, 2026Updated , new
  14. Part 14Recovering the Project and Resuming Real TestsDevelopment work: Oct 5, 2026Updated , new
  15. Part 15Making Memory Protection and Lifetime Tests More UsefulDevelopment work: Oct 6 – 9, 2026Updated , new
  16. Part 16Getting Wine's Real 32-Bit Startup to RunDevelopment work: Oct 9 – 11, 2026Updated , new
  17. Part 17Making the Launcher Own Its Storage and ProcessesDevelopment work: Oct 11, 2026Updated , new
  18. Part 18A Real Archive Roundtrip and Better File BehaviorDevelopment work: Oct 11, 2026Updated , new
  19. Part 19Asynchronous I/O and the Bytes a Cancelled Write KeepsDevelopment work: Oct 11, 2026Updated , new

Arrow keys move through the results, Enter opens one, Command or Control with Enter opens it in a new tab. Tab and Shift+Tab change which kind of results are shown.