【重學C語言】十八、SDL2 圖形編程介紹和環境配置
- **SDL2介紹**
- SDL 2用途
- SDL 在哪些平臺上運行?
- 下載和安裝 SDL2
- 安裝 SDL2
- clion 配置 SDL2
SDL2介紹
SDL2(Simple DirectMedia Layer 2)是一個開源的跨平臺多媒體開發庫,主要用于游戲開發中的多媒體處理,如視頻渲染、音頻播放、鼠標/鍵盤控制等。它用C語言編寫,支持多種平臺,包括Windows、macOS、Linux、iOS和Android等。SDL2通過提供統一的接口,內部會根據不同的平臺調用底層的API,大大降低了多媒體應用開發的難度。
SDL 2用途
視頻
- 3D圖形:SDL 可與 OpenGL API 或 Direct3D API 結合使用,用于 3D 圖形
- 加速 2D 渲染 API:支持簡單的旋轉、縮放和 alpha 混合,所有這些都使用現代 3D API 加速,使用 OpenGL 和 Direct3D 支持加速
- 創建和管理多個窗口
輸入事件
- 提供的事件和 API 函數用于:
- 應用程序和窗口狀態更改
- 鼠標輸入
- 鍵盤輸入
- 操縱桿和游戲控制器輸入
- 多點觸控手勢
- 可以使用SDL_EventState ()啟用或禁用每個事件
- 事件在發布到內部事件隊列之前通過用戶指定的過濾器函數
- 線程安全事件隊列
力反饋
- Windows、Mac OS X 和 Linux 支持力反饋
音頻
- 設置8位和16位音頻、單聲道立體聲或5.1環繞聲的音頻播放,如果硬件不支持格式,可選擇轉換
- 音頻在單獨的線程中獨立運行,通過用戶回調機制填充
- 專為定制軟件混音器設計,但SDL_mixer提供完整的音頻/音樂輸出庫
文件 I/O 抽象
- 用于打開、讀取和寫入數據的通用抽象
- 對文件和內存的內置支持
共享對象支持
- 加載共享對象(Windows 上的 DLL,Mac OS X 上的 .dylib,Linux 上的 .so)
- 共享對象中的查找函數
線程
- 簡單的線程創建API
- 簡單線程本地存儲API
- 互斥體、信號量和條件變量
- 無鎖編程的原子操作
計時器
- 獲取經過的毫秒數
- 等待指定的毫秒數
- 在單獨的線程中創建與代碼一起運行的計時器
- 使用高分辨率計數器進行分析
CPU 特性檢測
- 查詢CPU數量
- 檢測 CPU 特性和支持的指令集
大端小端支持
- 檢測當前系統的字節序
- 用于快速交換數據值的例程
- 讀取和寫入指定字節序的數據
電池管理
- 查詢電源管理狀態
SDL 在哪些平臺上運行?
Windows
- 使用 Win32 API 進行顯示,利用 Direct3D 進行硬件加速
- 使用 DirectSound 和 XAudio2 作為聲音
Mac OS X
- 使用 Cocoa 進行視頻顯示,利用 OpenGL 進行硬件加速
- 使用 Core Audio 播放聲音
Linux
- 使用 X11 進行視頻顯示,利用 OpenGL 進行硬件加速
- 使用 ALSA、OSS 和 PulseAudio API 來處理聲音
IOS
- 使用 UIKit 進行視頻顯示,利用 OpenGL ES 2.0 進行硬件加速
- 使用 Core Audio 播放聲音
Android
- 使用 JNI 接口進行視頻顯示,利用 OpenGL ES 1.1 和 2.0 進行硬件加速
- 對聲音使用 JNI 音頻回調
下載和安裝 SDL2
安裝 SDL2
-
點擊 SDL2 核心庫下載 下載SDL2庫,進入 GitHub下載
-
下載出來會有一個壓縮包,放到一個合適的目錄(記住這個目錄哦,經常要用的),解壓。
-
進入解壓后的目錄,如下圖:
- cmake:cmake配置文件
- docs:文檔目錄,只不過都是英文的
- include:頭文件目錄,編程需要的
- lib:庫目錄(靜態庫和動態庫都有)
4. 給環境變量添加庫目錄,讓程序運行的時候能夠找到動態庫。
clion 配置 SDL2
配置 CMakeLists.txt
在你的 CLion 項目中,你需要更新 CMakeLists.txt 文件以包含 SDL2。這通常涉及以下幾個步驟:
* 查找 SDL2 的頭文件和庫文件。
* 使用 `find_package` 命令(如果可用)。
* 添加 SDL2 的頭文件路徑和庫文件到你的項目中。
以下是一個簡單的 CMakeLists.txt 示例,用于在 Unix-like 系統(如 Linux 或 macOS)上包含 SDL2:
cmake_minimum_required(VERSION 3.28)
project(SDL2_config C)set(CMAKE_C_STANDARD 23)
# 查找SDL2包,REQUIRED強制請求,沒找到報錯
find_package(SDL2 REQUIRED)
# 使用指定的源文件生成目標
add_executable (${PROJECT_NAME} "main.c")
# 指定目標在鏈接時需要的依賴(庫)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
注意:在 Windows 上,你可能需要手動指定 SDL2 的頭文件和庫文件的路徑。
編寫代碼
現在你可以開始編寫使用 SDL2 的代碼了。以下是一個簡單的 SDL2 初始化示例:
#define SDL_MAIN_HANDLED
#include <SDL.h>int main(int argc, char* argv[]) {SDL_version ver;SDL_GetVersion(&ver);SDL_Log("%d %d %d\n", ver.major, ver.minor, ver.patch);return 0;
}
構建和運行
現在你可以使用 CLion 構建并運行你的 SDL2 項目了。如果一切正常,你應該會看到一個 SDL2 窗口顯示出來。