*
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user