【重学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 窗口显示出来。