SDL, “Simple DirectMedia Layer”,它是一套開放源代碼的跨平臺多媒體開發(fā)庫意系,使用C語言寫成。其主要用于游戲開發(fā)中的多媒體處理饺汹,如視頻渲染蛔添,音頻播放,鼠標(biāo)/鍵盤控制等操作兜辞。它對外接供了一套統(tǒng)一的接口迎瞧,但在內(nèi)部,它會根據(jù)不同平臺調(diào)用不同的底層 API庫逸吵。如在 Linux 系統(tǒng)下夹攒,它會使用 opengl 做渲染,而在 Window 下它會調(diào)用 D3D API進(jìn)行渲染胁塞。
SDL2安裝
SDL官網(wǎng)下載:https://www.libsdl.org/download-2.0.php
下載Source Code(以后去看源代碼也比較方便),然后進(jìn)行編譯安裝:
configure --prefix=/usr/local
sudo make && make install
在/usr/local下就可以找到編譯后的SDL2相關(guān)文件
SDL2使用
運(yùn)行環(huán)境Windows + CLion压语,代碼通用啸罢,不同平臺只需要更改依賴的SDL庫即可
CMakeList
cmake_minimum_required(VERSION 3.12)
project(SimplePlayer C)
set(CMAKE_C_STANDARD 99)
set(SOURCE_FILES main.c)
# 這里我使用的是自己機(jī)器上安裝的SDL庫,根據(jù)自己的安裝路徑替換
set(INC_DIR_SDL C:/cygwin64/usr/local/include/SDL2/)
set(LINK_DIR_SDL C:/cygwin64/usr/local/lib/)
include_directories(${INC_DIR_SDL})
link_directories(${LINK_DIR_SDL})
add_executable(SimplePlayer ${SOURCE_FILES})
target_link_libraries(
SimplePlayer
SDL2
SDL2main)
SDL的基本流程
1胎食、初始化SDL
2扰才、創(chuàng)建窗口
3、創(chuàng)建渲染器
4厕怜、清空緩沖區(qū)
5衩匣、繪制要顯示的內(nèi)容
6、最終將緩沖區(qū)內(nèi)容渲染到window窗口上粥航。
7琅捏、銷毀渲染器
8、銷毀窗口
9递雀、退出SDL
下面是一個(gè)最簡單的SDL程序柄延,會顯示一個(gè)640*480的窗口栋豫,窗口內(nèi)部為紅色懦鼠,顯示3秒后消失
#include <SDL2/SDL.h>
int WinMain() {
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
SDL_Init(SDL_INIT_VIDEO);// 初始化函數(shù),可以確定希望激活的子系統(tǒng)
window = SDL_CreateWindow("My First Window",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
640,
480,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);// 創(chuàng)建窗口
if (!window) {
return -1;
}
renderer = SDL_CreateRenderer(window, -1, 0);//基于窗口創(chuàng)建渲染器
if (!renderer) {
return -1;
}
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); //設(shè)置渲染器顏色 r、g坦胶、b杨凑、a
SDL_RenderClear(renderer);//用指定的顏色清空緩沖區(qū)
SDL_RenderPresent(renderer); //將緩沖區(qū)中的內(nèi)容輸出到目標(biāo)窗口上滤奈。
SDL_Delay(3000); // 延時(shí)3秒
SDL_DestroyRenderer(renderer); //銷毀渲染器
SDL_DestroyWindow(window); //銷毀窗口
SDL_Quit(); //退出SDL
return 0;
}
SDL API簡介
-
SDL_Init 初始化
int SDL_Init(Uint32 flags)
flages: SDL_INIT_TIMER 定時(shí)器子系統(tǒng) SDL_INIT_AUDIO 音頻子系統(tǒng) SDL_INIT_VIDEO 視頻子系統(tǒng),同時(shí)會初始化事件子系統(tǒng) SDL_INIT_EVENTS 事件子系統(tǒng) SDL_INIT_EVERYTHING 初始化所有子系統(tǒng)=
-
SDL_CreateWindow 創(chuàng)建窗口
SDL_Window* SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags);
title:窗口標(biāo)題 x,y,w,h:窗口坐標(biāo) flags: ::SDL_WINDOW_FULLSCREEN,//全屏 ::SDL_WINDOW_OPENGL,//使用OpenGL上下文 ::SDL_WINDOW_HIDDEN, //窗口不可見 ::SDL_WINDOW_BORDERLESS, //無邊框 ::SDL_WINDOW_RESIZABLE,//窗口大小可變 ::SDL_WINDOW_MAXIMIZED, //窗口最大化 ::SDL_WINDOW_MINIMIZED,//窗口最小化 ::SDL_WINDOW_INPUT_GRABBED,//輸入捕獲
-
SDL_CreateRenderer 創(chuàng)建渲染器
SDL_Renderer* SDL_CreateRenderer(SDL_Window* window, int index, Uint32 flags)
window: 指明在哪個(gè)窗口里進(jìn)行渲染 index: 指定渲染驅(qū)動的索引號撩满。一般指定為 -1. flags: SDL_RENDERER_SOFTWARE //The renderer is a software fallback 軟件備份 SDL_RENDERER_ACCELERATED //The renderer uses hardware acceleration 硬件加速 SDL_RENDERER_PRESENTVSYNC //Present is synchronized with the refresh rate 刷新率同步 SDL_RENDERER_TARGETTEXTURE //The renderer supports rendering to texture 支持渲染紋理