Use better implementation

This commit is contained in:
Jaby Blubb 2023-12-17 23:29:10 +01:00
parent e916fc358b
commit 3daa65c3b3
1 changed files with 16 additions and 19 deletions

View File

@ -71,42 +71,39 @@ namespace JabyEngine {
} }
}; };
Letter::Linked letter_buffer[2][4]; // v double buffer do not change size without adjusting
uint8_t cur_buffer; Letter::Linked letter_buffer[2*4];
uint8_t free_idx; uint8_t free_idx;
void setup() { void setup() {
for(auto& buffer : this->letter_buffer) { for(auto& letter : this->letter_buffer) {
for(auto& letter : buffer) { letter->setup(SizeU16::create(16, 16));
letter->setup(SizeU16::create(16, 16)); letter.set_link_identitiy();
letter.set_link_identitiy();
}
} }
this->free_idx = 0;
this->cur_buffer = 0;
this->free_idx = 0;
} }
void load_to(const PositionU16& pos, const uint16_t* bit_map) { 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); cur_letter->load_to(pos, bit_map);
if(this->free_idx == 4) { if((this->free_idx&0x3) == 0) {
cur_letter.terminate(); cur_letter.terminate();
GPU::render(this->letter_buffer[this->cur_buffer][0]); GPU::render(this->letter_buffer[this->free_idx - 4]);
this->free_idx = 0; this->free_idx &= ~0x7;
this->cur_buffer ^= 1;
} }
else { else {
cur_letter.concat(this->letter_buffer[this->cur_buffer][this->free_idx]); cur_letter.concat(this->letter_buffer[this->free_idx]);
} }
} }
void flush() { void flush() {
if(this->free_idx > 0) { if((this->free_idx&0x3) != 0) {
this->letter_buffer[this->cur_buffer][this->free_idx - 1].terminate(); this->letter_buffer[this->free_idx - 1].terminate();
GPU::render(this->letter_buffer[this->cur_buffer][0]);
const auto idx = this->free_idx > 3 ? 4 : 0;
GPU::render(this->letter_buffer[idx]);
} }
} }
}; };