core: make Core.pollEvents return an iterator, remove Core.hasEvent

After this change:

* `Core.pollEvents` returns an iterator. At the time of polling events, Mach core
  will perform work to poll for events, handle resizing of the framebuffer, etc.
  and the iterator allows the caller to consume all available events.
* The event queue is now baced by a `std.fifo.LinearFifo`, which removes the need
  for dynamic allocation of each event. Instead, the event queue starts with a generous
  size suitable for most high-end gaming setups (high-precision mouse, etc.) and can
  grow, but never shrink, up to the maximum event queue size experienced by the app
  within any given frame. Effectively, this means we find the maximum capacity needed
  to store events and avoid runtime allocations.
* `Core.hasEvent` is removed.

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2023-01-25 10:23:28 -07:00 committed by Stephen Gutekanst
parent b497a1bbeb
commit 40351f85ba
4 changed files with 142 additions and 134 deletions

View file

@ -14,7 +14,6 @@ comptime {
// Core
assertHasDecl(@This().Core, "init");
assertHasDecl(@This().Core, "deinit");
assertHasDecl(@This().Core, "hasEvent");
assertHasDecl(@This().Core, "pollEvents");
assertHasDecl(@This().Core, "framebufferSize");