From 3daa65c3b3336435dfd70ee087f2e9526e506259 Mon Sep 17 00:00:00 2001 From: Jaby Blubb Date: Sun, 17 Dec 2023 23:29:10 +0100 Subject: [PATCH] Use better implementation --- src/Library/src/BootLoader/gpu_boot.cpp | 35 +++++++++++-------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/Library/src/BootLoader/gpu_boot.cpp b/src/Library/src/BootLoader/gpu_boot.cpp index 2447f042..fa05f2a6 100644 --- a/src/Library/src/BootLoader/gpu_boot.cpp +++ b/src/Library/src/BootLoader/gpu_boot.cpp @@ -71,42 +71,39 @@ namespace JabyEngine { } }; - Letter::Linked letter_buffer[2][4]; - uint8_t cur_buffer; + // v double buffer do not change size without adjusting + Letter::Linked letter_buffer[2*4]; uint8_t free_idx; void setup() { - for(auto& buffer : this->letter_buffer) { - for(auto& letter : buffer) { - letter->setup(SizeU16::create(16, 16)); - letter.set_link_identitiy(); - } + for(auto& letter : this->letter_buffer) { + letter->setup(SizeU16::create(16, 16)); + letter.set_link_identitiy(); } - - this->cur_buffer = 0; - this->free_idx = 0; + this->free_idx = 0; } void load_to(const PositionU16& pos, const uint16_t* bit_map) { - auto& cur_letter = this->letter_buffer[this->cur_buffer][this->free_idx++]; + auto& cur_letter = this->letter_buffer[this->free_idx++]; cur_letter->load_to(pos, bit_map); - if(this->free_idx == 4) { + if((this->free_idx&0x3) == 0) { cur_letter.terminate(); - GPU::render(this->letter_buffer[this->cur_buffer][0]); - this->free_idx = 0; - this->cur_buffer ^= 1; + GPU::render(this->letter_buffer[this->free_idx - 4]); + this->free_idx &= ~0x7; } else { - cur_letter.concat(this->letter_buffer[this->cur_buffer][this->free_idx]); + cur_letter.concat(this->letter_buffer[this->free_idx]); } } void flush() { - if(this->free_idx > 0) { - this->letter_buffer[this->cur_buffer][this->free_idx - 1].terminate(); - GPU::render(this->letter_buffer[this->cur_buffer][0]); + if((this->free_idx&0x3) != 0) { + this->letter_buffer[this->free_idx - 1].terminate(); + + const auto idx = this->free_idx > 3 ? 4 : 0; + GPU::render(this->letter_buffer[idx]); } } };