From 95a039c8d1f926365c8bf3c20b09ec6250e60d8a Mon Sep 17 00:00:00 2001 From: Markus Gerber Date: Fri, 7 Feb 2025 12:51:29 +0100 Subject: added internal buffer to get rid of display::get --- lib/nes/app/application.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'lib/nes/app/application.cc') diff --git a/lib/nes/app/application.cc b/lib/nes/app/application.cc index 4498f98..bb2f1e4 100644 --- a/lib/nes/app/application.cc +++ b/lib/nes/app/application.cc @@ -7,6 +7,16 @@ namespace nes::app { + auto application::display_proxy::get_front() const -> span + { + return buffer_front_; + } + + auto application::display_proxy::set(u32 const x, u32 const y, rgb const value) -> void { + buffer_back_[y * display::width + x] = value; + base.set(x, y, value); + } + auto application::display_proxy::switch_buffers() -> void { auto r = renderer{ base }; @@ -30,6 +40,7 @@ namespace nes::app r.render_text_format(32, 29, color::fixed_white, attrs, "{}", fps_counter.get_fps()); } + swap(buffer_front_, buffer_back_); base.switch_buffers(); } @@ -74,7 +85,7 @@ namespace nes::app { if (event == input_event::key_down(key::escape)) { - screen_freeze_.freeze(display_); + screen_freeze_.freeze(display_.get_front()); screen_confirm_quit_.set_confirm(false); display_.screen = &screen_freeze_; display_.popup = &screen_confirm_quit_; @@ -93,7 +104,7 @@ namespace nes::app if (console_->get_status() != status::success) { - screen_freeze_.freeze(display_); + screen_freeze_.freeze(display_.get_front()); display_.screen = &screen_freeze_; show_error("Runtime error", console_->get_status(), action::go_to_browser()); console_.clear(); -- cgit v1.3.1