summaryrefslogtreecommitdiff
path: root/lib/nes/util
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nes/util')
-rw-r--r--lib/nes/util/CMakeLists.txt1
-rw-r--r--lib/nes/util/display.hh44
2 files changed, 45 insertions, 0 deletions
diff --git a/lib/nes/util/CMakeLists.txt b/lib/nes/util/CMakeLists.txt
index 0fdb0ba..fdbc939 100644
--- a/lib/nes/util/CMakeLists.txt
+++ b/lib/nes/util/CMakeLists.txt
@@ -5,5 +5,6 @@ target_sources(
button-mask.hh
cycle-count.hh
debug.hh
+ display.hh
rgb.hh
snapshot.hh) \ No newline at end of file
diff --git a/lib/nes/util/display.hh b/lib/nes/util/display.hh
new file mode 100644
index 0000000..8b6e0e5
--- /dev/null
+++ b/lib/nes/util/display.hh
@@ -0,0 +1,44 @@
+#pragma once
+
+#include "nes/util/rgb.hh"
+
+namespace nes
+{
+ class rgb;
+
+ /// Abstraction of the display logic.
+ class display
+ {
+ public:
+ static constexpr auto width = unsigned{ 256 };
+ static constexpr auto height = unsigned{ 240 };
+
+ virtual ~display() = default;
+
+ display(display const&) = delete;
+ display(display&&) = delete;
+ auto operator=(display const&) -> display& = delete;
+ auto operator=(display&&) -> display& = delete;
+
+ /// Switch between front and back buffers.
+ virtual auto switch_buffers() -> void = 0;
+ /// Update the pixel at the given position in the back buffer.
+ virtual auto set(unsigned x, unsigned y, rgb value) -> void = 0;
+ /// Load the pixel value at the given position in the back buffer.
+ virtual auto get(unsigned x, unsigned y) const -> rgb = 0;
+ /// Clear the entire back buffer with a color.
+ virtual auto clear(rgb const color) -> void
+ {
+ for (auto y = unsigned{ 0 }; y < height; ++y)
+ {
+ for (auto x = unsigned{ 0 }; x < width; ++x)
+ {
+ set(x, y, color);
+ }
+ }
+ }
+
+ protected:
+ explicit display() = default;
+ };
+} // namespace nes \ No newline at end of file