日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SDL mac(event) 入门1 - 显示图像

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SDL mac(event) 入门1 - 显示图像 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廢話

SDL(Simple DirectMedia Layer)是一套開放源代碼
的跨平臺多媒體開發庫,使用C語言寫成。SDL提供
了數種控制圖像、聲音、輸出入的函數,讓開發者只
要用相同或是相似的代碼就可以開發出跨多個平臺
(Linux、Windows、Mac OS X等)的應用軟件。目
前SDL多用于開發游戲、模擬器、媒體播放器等多媒
體應用領域。

常用子系統

? SDL_INIT_TIMER:定時器
? SDL_INIT_AUDIO:音頻
? SDL_INIT_VIDEO:視頻
? SDL_INIT_EVENTS:事件

windows 常用過程

? SDL_Init():初始化SDL系統
? SDL_CreateWindow():創建窗口SDL_Window
? SDL_CreateRenderer():創建渲染器SDL_Renderer
? SDL_CreateTexture():創建紋理SDL_Texture
? SDL_UpdateTexture():設置紋理的數據
? SDL_RenderCopy():將紋理的數據拷貝給渲染器
? SDL_RenderPresent():顯示
? SDL_Delay():工具函數,用于延時
? SDL_Quit():退出SDL系統
SDL事件
? 函數
? SDL_WaitEvent():等待一個事件
? SDL_PushEvent():發送一個事件
? SDL_PumpEvents():將硬件設備產生的事件放入事件隊列,用于
讀取事件,在調用該函數之前,必須調用SDL_PumpEvents搜集
鍵盤等事件
? SDL_PeepEvents():從事件隊列提取一個事件
? 數據結構
? SDL_Event:代表一個事件

MAC 的操作系統對于SDL 窗口顯示 前提是必須有事件控制 才可以可視化顯示 也就是必須在有或者是在Event 內去構建window 或者渲染圖形,否則無法可視化,但是進程中可以顯示出來

SDL 繪制窗口中隨機矩形 并且鍵盤控制退出

#include <stdio.h>#include "SDL2/SDL.h"#define FF_QUIT_EVENT (SDL_USEREVENT + 2) // 用戶自定義事件 SDL_USEREVENT 是SDL api為用戶定義的一個自定義事件的key 可以+1 +2 代表不同的時間 最高+ ffff int main(int argc, char* argv[]) {int run = 1;SDL_Window *window = NULL; //一個窗口SDL_Renderer *renderer = NULL; //一個渲染器SDL_Texture *texture = NULL; // 一個紋理SDL_Event event; // 一個事件SDL_Rect rect;rect.w = 50;rect.h = 50;SDL_Init(SDL_INIT_VIDEO);window = SDL_CreateWindow("2333",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,1280,960,SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);if(!window){printf("create window error \n");return -1;}renderer = SDL_CreateRenderer(window,-1,0);if(!renderer){printf("creater renderer error \n");return -1;}texture = SDL_CreateTexture(renderer,SDL_PIXELFORMAT_RGB888,SDL_TEXTUREACCESS_TARGET,1280,960);if (!texture){return -1;}int show_count = 0 ;int b_exit = 0;for(;;){ // 事件控制switch (event.type) /判斷事件 {case SDL_KEYDOWN: // 鍵盤監視switch (event.key.keysym.sym) {case SDLK_a:printf("key down a\n");break;case SDLK_s:printf("key down s\n");break;case SDLK_d:printf("key down d\n");break;case SDLK_q:printf("quit event\n");SDL_Event event_q; //創建一個新事件event_q.type = FF_QUIT_EVENT ; //引入用戶自定義keySDL_PushEvent(&event_q); //往消息隊列中發送一個事件default:printf("key down 0x%x\n", event.key.keysym.sym);break;}break;case FF_QUIT_EVENT:{printf("receive quit event\n");b_exit = 1;break;}}SDL_WaitEvent(&event);rect.x = rand()%1280;rect.y = rand()%960;SDL_SetRenderTarget(renderer,texture);// 設置渲染目標為紋理SDL_SetRenderDrawColor(renderer,0,255,255,255);SDL_RenderClear(renderer);SDL_RenderDrawRect(renderer, &rect); //繪制一個長方形SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); //長方形為白色SDL_RenderFillRect(renderer, &rect); / 前面為渲染紋理 后面為窗口SDL_SetRenderTarget(renderer, NULL); //恢復默認,渲染目標為窗口SDL_RenderCopy(renderer, texture, NULL, NULL); //將紋理數據復制給渲染目標SDL_RenderPresent(renderer);SDL_Delay(300);if(b_exit)break;}//destory rendererif (renderer)SDL_DestroyRenderer(renderer);// Close and destroy the windowif (window)SDL_DestroyWindow(window);// Clean upSDL_Quit();return 0;}

總結

以上是生活随笔為你收集整理的SDL mac(event) 入门1 - 显示图像的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。