Skip to content

Commit 833aad2

Browse files
authored
fixed rendering of indexed frames with palette (#55)
1 parent 8f38753 commit 833aad2

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

src/DMD.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,8 @@ void DMD::ZeDMDThread()
625625
uint16_t segData1[128] = {0};
626626
uint16_t segData2[128] = {0};
627627
uint8_t palette[PALETTE_SIZE] = {0};
628-
uint8_t renderBuffer[256 * 64] = {0};
628+
uint8_t indexBuffer[256 * 64] = {0};
629+
uint8_t renderBuffer[256 * 64 * 3] = {0};
629630

630631
m_dmdFrameReady.load(std::memory_order_acquire);
631632
m_stopFlag.load(std::memory_order_acquire);
@@ -697,12 +698,12 @@ void DMD::ZeDMDThread()
697698
if (m_pUpdateBufferQueue[bufferPosition]->mode == Mode::SerumV1)
698699
{
699700
memcpy(palette, m_pUpdateBufferQueue[bufferPosition]->segData, PALETTE_SIZE);
700-
memcpy(renderBuffer, m_pUpdateBufferQueue[bufferPosition]->data, frameSize);
701+
memcpy(indexBuffer, m_pUpdateBufferQueue[bufferPosition]->data, frameSize);
701702
update = true;
702703
}
703704
else if (!m_pSerum && m_pUpdateBufferQueue[bufferPosition]->mode == Mode::Data)
704705
{
705-
memcpy(renderBuffer, m_pUpdateBufferQueue[bufferPosition]->data, frameSize);
706+
memcpy(indexBuffer, m_pUpdateBufferQueue[bufferPosition]->data, frameSize);
706707
update = true;
707708
}
708709
else if (m_pUpdateBufferQueue[bufferPosition]->mode == Mode::AlphaNumeric)
@@ -723,20 +724,21 @@ void DMD::ZeDMDThread()
723724
if (update)
724725
{
725726
if (m_pUpdateBufferQueue[bufferPosition]->hasSegData2)
726-
m_pAlphaNumeric->Render(renderBuffer, m_pUpdateBufferQueue[bufferPosition]->layout, segData1, segData2);
727+
m_pAlphaNumeric->Render(indexBuffer, m_pUpdateBufferQueue[bufferPosition]->layout, segData1, segData2);
727728
else
728-
m_pAlphaNumeric->Render(renderBuffer, m_pUpdateBufferQueue[bufferPosition]->layout, segData1);
729+
m_pAlphaNumeric->Render(indexBuffer, m_pUpdateBufferQueue[bufferPosition]->layout, segData1);
729730
}
730731
}
731732

732733
if (update)
733734
{
735+
uint16_t renderBuferPosition = 0;
734736
for (int i = 0; i < frameSize; i++)
735737
{
736-
int pos = renderBuffer[i] * 3;
737-
uint32_t r = palette[pos];
738-
uint32_t g = palette[pos + 1];
739-
uint32_t b = palette[pos + 2];
738+
int pos = indexBuffer[i] * 3;
739+
renderBuffer[renderBuferPosition++] = palette[pos];
740+
renderBuffer[renderBuferPosition++] = palette[pos + 1];
741+
renderBuffer[renderBuferPosition++] = palette[pos + 2];
740742
}
741743
}
742744
}

0 commit comments

Comments
 (0)