This commit is contained in:
2025-05-13 02:03:18 +03:00
parent 72860c7968
commit 90ef6120fd
463 changed files with 380758 additions and 2 deletions
+61
View File
@@ -0,0 +1,61 @@
#include "SwapChain.h"
#include "stm32h7xx_hal.h"
extern DMA_HandleTypeDef hdma_memtomem_dma1_stream0;
extern SRAM_HandleTypeDef hsram1;
volatile bool xferComplete = false;
extern "C" void frameXferCpltCallback(DMA_HandleTypeDef* hdma){
xferComplete = true;
}
SwapChain::SwapChain() : _backBufferTexture(&_backBuffer, getBackBufferDescription()){
}
void SwapChain::present(){
beginLcdUpload();
waitLcdUpload();
}
uint32_t frameStartTime = 0;
void SwapChain::beginLcdUpload(){
uint32_t frameMaxTime = 1000/112;
auto frameTime = HAL_GetTick() - frameStartTime;
if(frameTime < frameMaxTime){
HAL_Delay(frameMaxTime - frameTime);
}
Lcd::setCursor(0,0);
Lcd::beginWriteGram();
frameStartTime = HAL_GetTick();
//SCB_CleanInvalidateDCache_by_Addr((uint32_t*)DisplayFsmcInterface::dataLocation, sizeof(frameBuffer));
//SCB_CleanDCache_by_Addr((uint32_t*)&frameBuffer[0], sizeof(frameBuffer));
//HAL_SRAM_Write_DMA(&hsram1, (uint32_t*)DisplayFsmcInterface::dataLocation, (uint32_t*)&frameBuffer[0], sizeof(frameBuffer) / 4);
HAL_DMA_Start_IT(&hdma_memtomem_dma1_stream0, (uint32_t)_backBuffer.GetPointer(), (uint32_t)Stm32PlusPlus::Display::DisplayFsmcInterface::addressMap.dataLocation(), 320*240 / 2);
}
void SwapChain::waitLcdUpload(){
while(!xferComplete){}
xferComplete = false;
}
void SwapChain::init() {
hdma_memtomem_dma1_stream0.XferCpltCallback = frameXferCpltCallback;
Lcd::init();
Lcd::setOrientation(90);
}
TextureDescription SwapChain::getBackBufferDescription(){
TextureDescription desc;
desc.Width = BackBufferMipChain::Width;
desc.Height = BackBufferMipChain::Height;
desc.BytesPerPixel = BackBufferMipChain::BytesPerPixel;
desc.MipCount = BackBufferMipChain::MipsCount;
return desc;
}