Merge pull request #174 from mrfaptastic/dbuffmod

Double buff w/o delay
This commit is contained in:
mrfaptastic 2021-08-19 18:57:51 +01:00 committed by GitHub
commit 7a20e501d2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 22 deletions

View file

@ -388,7 +388,7 @@ class MatrixPanel_I2S_DMA {
// Setup the ESP32 DMA Engine. Sprite_TM built this stuff. // Setup the ESP32 DMA Engine. Sprite_TM built this stuff.
configureDMA(m_cfg); //DMA and I2S configuration and setup configureDMA(m_cfg); //DMA and I2S configuration and setup
showDMABuffer(); // show backbuf_id of 0 flipDMABuffer(); // show backbuf_id of 0
#if SERIAL_DEBUG #if SERIAL_DEBUG
if (!initialized) if (!initialized)
@ -496,32 +496,26 @@ class MatrixPanel_I2S_DMA {
{ {
if ( !m_cfg.double_buff) return; if ( !m_cfg.double_buff) return;
// Flip to other buffer as the backbuffer. i.e. Graphic changes happen to this buffer (but aren't displayed until showDMABuffer())
back_buffer_id ^= 1;
#if SERIAL_DEBUG
Serial.printf_P(PSTR("Set back buffer to: %d\n"), back_buffer_id);
#endif
// Wait before we allow any writing to the buffer. Stop flicker.
while(!i2s_parallel_is_previous_buffer_free()) { delay(1); }
}
inline void showDMABuffer()
{
if (!m_cfg.double_buff) return;
#if SERIAL_DEBUG #if SERIAL_DEBUG
Serial.printf_P(PSTR("Showtime for buffer: %d\n"), back_buffer_id); Serial.printf_P(PSTR("Showtime for buffer: %d\n"), back_buffer_id);
#endif #endif
i2s_parallel_flip_to_buffer(I2S_NUM_0, back_buffer_id); i2s_parallel_flip_to_buffer(I2S_NUM_0, back_buffer_id);
// Wait before we allow any writing to the buffer. Stop flicker. // Flip to other buffer as the backbuffer. i.e. Graphic changes happen to this buffer (but aren't displayed until showDMABuffer())
while(!i2s_parallel_is_previous_buffer_free()) { delay(1); } back_buffer_id ^= 1;
#if SERIAL_DEBUG
Serial.printf_P(PSTR("Set back buffer to: %d\n"), back_buffer_id);
#endif
} }
// stub function for compatibility
void showDMABuffer(){}
// check if backbuffer still has DMA transfer in progress or is it safe to write there
bool backbuffready(){ return i2s_parallel_is_previous_buffer_free(); }
inline void setPanelBrightness(int b) inline void setPanelBrightness(int b)
{ {
// Change to set the brightness of the display, range of 1 to matrixWidth (i.e. 1 - 64) // Change to set the brightness of the display, range of 1 to matrixWidth (i.e. 1 - 64)

View file

@ -98,7 +98,9 @@ class VirtualMatrixPanel
} }
void flipDMABuffer() { display->flipDMABuffer(); } void flipDMABuffer() { display->flipDMABuffer(); }
void showDMABuffer() { display->showDMABuffer(); } void showDMABuffer() {}
bool backbuffready(){ return display->backbuffready(); }
void drawDisplayTest(); void drawDisplayTest();