在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示

参考文章




源码下载地址

在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示


一、SDL2的创建、初始化、退出


typedef struct
{
   
   
    SDL_Window   * MainWindow;  /* 窗口 */
    SDL_Renderer * MainRender;  /* 渲染器 */
    SDL_Texture  * MainTexture; /* 纹理 */
    u8             ExitWindow;  /* 退出窗口 */
}AppGlobal_TypeDef, * AppGlobal_TypeDef_t;


static AppGlobal_TypeDef AppSystem = {
   
   0};
AppGlobal_TypeDef * pAppSystem = &AppSystem;


 /* 初始化SDL */
static u8 ubInit_SDL2(void)
{
   
   
    /* 初始化SDL */
    if (SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO) < 0)
    {
   
   
        SDL_Log("SDL Init Fail......%s\r\n", SDL_GetError());
        return 1;
    }

    /* 创建窗口 */
    AppSystem.MainWindow = SDL_CreateWindow("Virtual TFT SDL2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_PHY_WIDTH, WINDOW_PHY_HEIGHT, SDL_WINDOW_SHOWN);
    if (AppSystem.MainWindow == NULL)
    {
   
   
        SDL_Log("SDL Create Window Fail......%s\r\n", SDL_GetError());
        return 2;
    }

    /* 创建渲染器 */
    AppSystem.MainRender = SDL_CreateRenderer(AppSystem.MainWindow, -1, SDL_RENDERER_ACCELERATED);
    if (AppSystem.MainRender == NULL)
    {
   
   
        SDL_Log("SDL Create Renderer Fail......%s", SDL_GetError());
        return 3;
    }

    /* 创建纹理 */
    AppSystem.MainTexture = SDL_CreateTexture(AppSystem.MainRender, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, TFT_LCD_PHY_XWIDTH, TFT_LCD_PHY_YHEIGHT);
    if (AppSystem.MainTexture == NULL)
    {
   
   
        SDL_Log("SDL Create Texture Fail......%s", SDL_GetError());
        return 4;
    }

    /* 设置纹理模式 */
    SDL_SetTextureBlendMode(AppSystem.MainTexture, SDL_BLENDMODE_BLEND);
    memset(TFT_LCD_DIS_MEMORY, 0x99, TFT_LCD_PHY_XWIDTH * TFT_LCD_PHY_YHEIGHT * sizeof(u32));

    SDL_UpdateTexture(AppSystem.MainTexture, NULL, TFT_LCD_DIS_MEMORY, TFT_LCD_PHY_XWIDTH * sizeof(u32));
    SDL_RenderClear(AppSystem.MainRender);

    SDL_RenderCopy(AppSystem.MainRender, AppSystem.MainTexture, NULL, NULL);
    SDL_RenderPresent(AppSystem.MainRender);

    return 0;
}


/* 退出SDL */
static void vQuit_SDL2(void)
{
   
   
    SDL_Log("Complier Date: %s  %s %d\r\n", __DATE__, __TIME__, ulSuperTimer_GetTick());

    /* 销毁纹理 */
    if (AppSystem.MainTexture != NULL) SDL_DestroyTexture(AppSystem.MainTexture);

    /* 销毁渲染器 */
    if (AppSystem.MainRender != NULL)  SDL_DestroyRenderer(AppSystem.MainRender);

    /* 销毁窗口 */
    if (AppSystem.MainWindow != NULL) SDL_DestroyWindow(AppSystem.MainWindow);

    /* 退出SDL */
    SDL_Quit();
}



二、系统基本Tick、彩屏刷新、按键事件


/* 系统基本Tick */
static void vSystem_BasicTick(void)
{
   
   
    static Uint64 oldTick = 0;
    Uint64 curTick = SDL_GetTicks64();
    if (oldTick == curTick) return;

    vSuperTimer_IncTick((u16)(curTick - oldTick));
    oldTick = curTick;
}


/* 屏幕刷新+按键事件处理 */
static void vRefresh_KeyEvent_Handler(void)
{
   
   
    static Uint64 oldTick = 0;
    Uint64 curTick  = SDL_GetTicks64();
    SDL_Event event = {
   
   0};


    if ((curTick - oldTick) >= 20)
    {
   
   
        SDL_UpdateTexture(AppSystem.MainTexture, NULL, TFT_LCD_DIS_MEMORY, TFT_LCD_PHY_XWIDTH * sizeof(u32));
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值