optimized display update region

This commit is contained in:
2025-03-14 02:50:01 -04:00
parent af39b2ab07
commit 4f7083d7c7
4 changed files with 47 additions and 10 deletions

View File

@@ -20,11 +20,32 @@ namespace chocochip8 {
class Display {
public:
friend class Interpreter;
Display(): mpFramebuffer{std::make_unique<Framebuffer>()} {}
Display():
mpFramebuffer{std::make_unique<Framebuffer>()},
miTopDirtyScanline{0},
miBottomDirtyScanline{gcHeight - 1} {}
virtual ~Display() = default;
virtual void clear() {
for(auto &scanline : *mpFramebuffer) {
scanline.reset();
}
miTopDirtyScanline = 0;
miBottomDirtyScanline = gcHeight - 1;
}
virtual Scanline& getModifyableScanline(size_t y) {
Scanline& res = mpFramebuffer->at(y);
miTopDirtyScanline = std::min(miTopDirtyScanline, y);
miBottomDirtyScanline = std::max(miBottomDirtyScanline, y);
return res;
}
protected:
std::unique_ptr<Framebuffer> mpFramebuffer;
mutable size_t miTopDirtyScanline;
mutable size_t miBottomDirtyScanline;
};
class Buzzer {