summaryrefslogtreecommitdiff
path: root/lib/nes/app/application.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nes/app/application.cc')
-rw-r--r--lib/nes/app/application.cc15
1 files changed, 13 insertions, 2 deletions
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<rgb, display::width * display::height>
+ {
+ 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();