* This can only be called if `storeBwBuffer` was called prior to the grayscale render. * It should be called to restore the BW buffer state after grayscale rendering is complete. * Uses chunked restoration to match chunked storage. */
| 1844 | * Uses chunked restoration to match chunked storage. |
| 1845 | */ |
| 1846 | void GfxRenderer::restoreBwBuffer() { |
| 1847 | // Check if all chunks are allocated |
| 1848 | bool missingChunks = false; |
| 1849 | for (const auto& bwBufferChunk : bwBufferChunks) { |
| 1850 | if (!bwBufferChunk) { |
| 1851 | missingChunks = true; |
| 1852 | break; |
| 1853 | } |
| 1854 | } |
| 1855 | |
| 1856 | if (missingChunks) { |
| 1857 | freeBwBufferChunks(); |
| 1858 | return; |
| 1859 | } |
| 1860 | |
| 1861 | for (size_t i = 0; i < bwBufferChunks.size(); i++) { |
| 1862 | const size_t offset = i * BW_BUFFER_CHUNK_SIZE; |
| 1863 | const size_t chunkSize = std::min(BW_BUFFER_CHUNK_SIZE, static_cast<size_t>(frameBufferSize - offset)); |
| 1864 | memcpy(frameBuffer + offset, bwBufferChunks[i], chunkSize); |
| 1865 | } |
| 1866 | |
| 1867 | display.cleanupGrayscaleBuffers(frameBuffer); |
| 1868 | |
| 1869 | freeBwBufferChunks(); |
| 1870 | LOG_DBG("GFX", "Restored and freed BW buffer chunks"); |
| 1871 | } |
| 1872 | |
| 1873 | /** |
| 1874 | * Cleanup grayscale buffers using the current frame buffer. |
no test coverage detected