fix(ppu): call present() at the end of each frame to display output#31
Merged
eddmann merged 1 commit intoNov 9, 2025
Merged
Conversation
The PPU was writing pixels to the framebuffer correctly via setPixel(), but never called present() to signal that the frame was complete and ready to be displayed. This caused the CLI renderer to never output frames to the terminal, resulting in a white screen. This fix adds present() to the FramebufferInterface and calls it from the PPU when a frame completes (when LY wraps from 153 back to 0 during VBlank). Changes: - Add present() method to FramebufferInterface - Implement present() in ArrayFramebuffer (no-op for testing) - Implement present() in WasmFramebuffer (no-op, JS polls for pixels) - CliRenderer.present() already implemented, now gets called - Call framebuffer->present() from PPU.stepVBlank() when frame completes Fixes issue where Tetris and other games would show white screen in CLI mode because present() was never invoked to trigger terminal rendering.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The PPU was writing pixels to the framebuffer correctly via setPixel(),
but never called present() to signal that the frame was complete and
ready to be displayed. This caused the CLI renderer to never output
frames to the terminal, resulting in a white screen.
This fix adds present() to the FramebufferInterface and calls it from
the PPU when a frame completes (when LY wraps from 153 back to 0 during
VBlank).
Changes:
Fixes issue where Tetris and other games would show white screen in CLI
mode because present() was never invoked to trigger terminal rendering.