SDL2音视频渲染入门
SDL, “Simple DirectMedia Layer”,它是一套开放源代码的跨平台多媒体开发库,使用C语言写成。其主要用于游戏开发中的多媒体处理,如视频渲染,音频播放,鼠标/键盘控制等操作。它对外接供了一套统一的接口,但在内部,它会根据不同平台调用不同的底层 API库。如在 Linux 系统下,它会使用 opengl 做渲染,而在 Window 下它会调用 D3D API进行渲染。
SDL2安装
SDL官网下载:https://www.libsdl.org/download-2.0.php
下载Source Code(以后去看源代码也比较方便),然后进行编译安装:
1 | configure --prefix=/usr/local |
1 | sudo make && make install |
在/usr/local下就可以找到编译后的SDL2相关文件
SDL2使用
运行环境Windows + CLion,代码通用,不同平台只需要更改依赖的SDL库即可
CMakeList
1 | cmake_minimum_required(VERSION 3.12) |
SDL的基本流程
1、初始化SDL
2、创建窗口
3、创建渲染器
4、清空缓冲区
5、绘制要显示的内容
6、最终将缓冲区内容渲染到window窗口上。
7、销毁渲染器
8、销毁窗口
9、退出SDL
下面是一个最简单的SDL程序,会显示一个640*480的窗口,窗口内部为红色,显示3秒后消失
1 |
|
SDL API简介
SDL_Init 初始化
1
int SDL_Init(Uint32 flags)
1
2
3
4
5
6flages:
SDL_INIT_TIMER 定时器子系统
SDL_INIT_AUDIO 音频子系统
SDL_INIT_VIDEO 视频子系统,同时会初始化事件子系统
SDL_INIT_EVENTS 事件子系统
SDL_INIT_EVERYTHING 初始化所有子系统=SDL_CreateWindow 创建窗口
1
2
3SDL_Window* SDL_CreateWindow(const char *title,
int x, int y, int w,
int h, Uint32 flags);1
2
3
4
5
6
7title:窗口标题
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 创建渲染器
1
2
3SDL_Renderer* SDL_CreateRenderer(SDL_Window* window,
int index,
Uint32 flags)1
2
3
4
5
6
7window: 指明在哪个窗口里进行渲染
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 支持渲染纹理