SDL視頻渲染教程

#include <SDL2/SDL.h>
int main()
{
    SDL_Window *window=NULL;
    SDL_Renderer *render=NULL;
    SDL_Texture *texture=NULL;
    SDL_Event event;
    SDL_Rect rect;
    int quit=0;
    //初始化環境
    SDL_Init(0);
    //創建一個窗口
    window = SDL_CreateWindow("test",200,200,900,600,SDL_WINDOW_SHOWN);
    if(!window)
    {

    }
    //創建一個渲染器
    render = SDL_CreateRenderer(window,-1,0);
    if(!render)
    {
    }
    /*
    //設置背景色
    SDL_SetRenderDrawColor(render,255,0,0,30);
    //SDL_RenderDrawLine(render,300,300,600,600);
    SDL_RenderClear(render);
    SDL_RenderPresent(render);
   // SDL_Delay(5000);
    //event.window
    */

    /*
        視頻渲染流程:
        將一幅圖像的rgb數據 經過抽象爲一個紋理數據 然後發送數據至顯卡,然後顯卡根據紋理還原一幅圖像數據,最後發送給顯示器顯示出來
    */
    //創建一個文理
    texture = SDL_CreateTexture(render,
                                SDL_PIXELFORMAT_ABGR8888,
                                SDL_TEXTUREACCESS_TARGET,
                                640,
                                480);

   do
   {
        SDL_PollEvent(&event);//輪訓方式
        switch(event.type)
        {
        case SDL_QUIT:
            quit=1;
            break;
        default:
            break;
        }

        rect.w = 40;
        rect.h = 30;
        rect.x= rand()%640;
        rect.y = rand()%480;

        SDL_SetRenderTarget(render,texture);
        SDL_SetRenderDrawColor(render,0,0,0,0);
        //設置背景色 在畫圖中就是以背景色填充
        SDL_RenderClear(render);

        SDL_RenderDrawRect(render,&rect);
        SDL_SetRenderDrawColor(render,255,0,0,0);
        SDL_RenderFillRect(render,&rect);

        //設置渲染目標
        SDL_SetRenderTarget(render,NULL);
        //紋理拷貝到顯卡渲染
        SDL_RenderCopy(render,texture,NULL,NULL);
        //開始渲染圖像並拷貝到顯示器
        SDL_RenderPresent(render);
   }while(!quit);

   //刪除紋理
    SDL_DestroyTexture(texture);
    //刪除渲染器
    SDL_DestroyRenderer(render);
    //刪除窗口
    SDL_DestroyWindow(window);
    //卸載環境
    SDL_Quit();
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章