Use better implementation
This commit is contained in:
parent
e916fc358b
commit
3daa65c3b3
|
@ -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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue