SDL, 「Simple DirectMedia Layer」,它是一套開放源代碼的跨平臺多媒體開發庫,使用C語言寫成。其主要用於遊戲開發中的多媒體處理,如視頻渲染,音頻播放,鼠標/鍵盤控制等操做。它對外接供了一套統一的接口,但在內部,它會根據不一樣平臺調用不一樣的底層 API庫。如在 Linux 系統下,它會使用 opengl 作渲染,而在 Window 下它會調用 D3D API進行渲染。php
SDL官網下載:www.libsdl.org/download-2.…bash
下載Source Code(之後去看源代碼也比較方便),而後進行編譯安裝:函數
configure --prefix=/usr/local
複製代碼
sudo make && make install
複製代碼
在/usr/local下就能夠找到編譯後的SDL2相關文件ui
運行環境Windows + CLion,代碼通用,不一樣平臺只須要更改依賴的SDL庫便可spa
cmake_minimum_required(VERSION 3.12)
project(SimplePlayer C)
set(CMAKE_C_STANDARD 99)
set(SOURCE_FILES main.c)
# 這裏我使用的是本身機器上安裝的SDL庫,根據本身的安裝路徑替換
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開放源代碼
二、建立窗口3d
三、建立渲染器code
四、清空緩衝區cdn
五、繪製要顯示的內容視頻
六、最終將緩衝區內容渲染到window窗口上
七、銷燬渲染器
八、銷燬窗口
九、退出SDL
下面是一個最簡單的SDL程序,會顯示一個640*480的窗口,窗口內部爲紅色,顯示3秒後消失
#include <SDL2/SDL.h>
int WinMain() {
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
SDL_Init(SDL_INIT_VIDEO);// 初始化函數,能夠肯定但願激活的子系統
window = SDL_CreateWindow("My First Window",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
640,
480,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);// 建立窗口
if (!window) {
return -1;
}
renderer = SDL_CreateRenderer(window, -1, 0);//基於窗口建立渲染器
if (!renderer) {
return -1;
}
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); //設置渲染器顏色 r、g、b、a
SDL_RenderClear(renderer);//用指定的顏色清空緩衝區
SDL_RenderPresent(renderer); //將緩衝區中的內容輸出到目標窗口上。
SDL_Delay(3000); // 延時3秒
SDL_DestroyRenderer(renderer); //銷燬渲染器
SDL_DestroyWindow(window); //銷燬窗口
SDL_Quit(); //退出SDL
return 0;
}
複製代碼
SDL_Init 初始化
int SDL_Init(Uint32 flags) 複製代碼
flages:
SDL_INIT_TIMER 定時器子系統
SDL_INIT_AUDIO 音頻子系統
SDL_INIT_VIDEO 視頻子系統,同時會初始化事件子系統
SDL_INIT_EVENTS 事件子系統
SDL_INIT_EVERYTHING 初始化全部子系統=
複製代碼
SDL_CreateWindow 建立窗口
SDL_Window* SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags);
複製代碼
title:窗口標題
x,y,w,h:窗口座標
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 建立渲染器
SDL_Renderer* SDL_CreateRenderer(SDL_Window* window, int index, Uint32 flags) 複製代碼
window: 指明在哪一個窗口裏進行渲染
index: 指定渲染驅動的索引號。通常指定爲 -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 支持渲染紋理
複製代碼