From 37a22f996620050fa7664413013315caa5b1d974 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Mon, 18 May 2026 12:52:51 -0400 Subject: [PATCH] Little optimization where I don't render if there was a colision. This is because chip-8 attempts to draw to detect colision, and then 'undoes' it, so no point in rendering that. --- src/chip8.cpp | 5 +++++ src/chip8.hpp | 1 + src/main.cpp | 16 +++++++++------- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/chip8.cpp b/src/chip8.cpp index 19ab816..d8e41ba 100644 --- a/src/chip8.cpp +++ b/src/chip8.cpp @@ -288,8 +288,10 @@ void Chip8::OP_Dxyn() { uint8_t yPos = registers[Vy] % VIDEO_HEIGHT; registers[0xF] = 0; + for(size_t row = 0; row < height; ++row) { uint8_t spriteByte = memory[index + row]; + for(size_t col = 0; col < 8; ++col) { uint8_t spritePixel = spriteByte & (0x80u >> col); uint32_t* screenPixel = &video[(yPos + row) * VIDEO_WIDTH + (xPos + col)]; @@ -305,6 +307,9 @@ void Chip8::OP_Dxyn() { } } } + + // don't bother rendering collision tests + needs_render = !registers[0xF]; } void Chip8::OP_Ex9E() { diff --git a/src/chip8.hpp b/src/chip8.hpp index e205961..d5ad3ec 100644 --- a/src/chip8.hpp +++ b/src/chip8.hpp @@ -45,6 +45,7 @@ class Chip8 { 0xF0, 0x80, 0xF0, 0x80, 0xF0, // E 0xF0, 0x80, 0xF0, 0x80, 0x80 // F }; + bool needs_render = true; std::default_random_engine randGen; std::uniform_int_distribution randByte; diff --git a/src/main.cpp b/src/main.cpp index ecdc702..8082bd8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -99,13 +99,15 @@ int main(int argc, char* argv[]) { chip8.Cycle(); cycle_stats.sample_time(t); - auto ut = update_stats.time_start(); - display.update(chip8); - update_stats.sample_time(ut); - - auto rt = render_stats.time_start(); - display.render(); - render_stats.sample_time(rt); + if(chip8.needs_render) { + auto ut = update_stats.time_start(); + display.update(chip8); + update_stats.sample_time(ut); + + auto rt = render_stats.time_start(); + display.render(); + render_stats.sample_time(rt); + } } cycle_stats.dump("CYCLE TIMES");