SDL —— SDL2及API简介

SDL2框架

     SDL( Simple DirectMedia Layer) 是一套开放源代码的跨平台多媒体开发库, 使用 C 语
言写成。 SDL 提供了数种控制图像、 声音、 输出入的函数, 让开发者只要用相同或是相似的
代码就可以开发出跨多个平台( Linux、 Windows、 Mac OS X 等) 的应用软件。 目前 SDL 多
用于开发游戏、 模拟器、 媒体播放器等多媒体应用领域

     SDL 使用 GNU 宽通用公共许可证为授权方式, 意指动态链接(dynamic link) 其库并不
需要开放本身的源代码。 因此诸如《雷神之锤 4》 等商业游戏也使用 SDL 来开发。

     虽然 SDL 时常被比较为‘跨平台的 DirectX’ , 然而事实上 SDL 是定位成以精简的方式
来完成基础的功能, 它大幅度简化了控制图像、 声音、 输出入等工作所需撰写的代码。 但更
高级的绘图功能或是音效功能则需搭配 OpenGL 和 OpenAL 等 API 来达成。 另外它本身也没
有方便创建图形用户界面的函数。

     SDL 在结构上是将不同操作系统的库再包装成相同的函数, 例如 SDL 在 Windows 平台上
其实是 DirectX 的再包装, 旧版本包装的是 DirectX 5, 现时的版本(SDL 1.2) 则是 DirectX 7。
而在使用 X11 的平台上(包括 Linux), SDL 则是与 Xlib 库沟通来输出图像。SDL —— SDL2及API简介_第1张图片


     1、SDL 视频渲染主要涉及到四个对象 (引用雷神部分文章)

          SDL_Window
               SDL_Window结构体定义了一个SDL2窗口。若直接使用编译好的SDK,那么是看不到其内部结构。

          SDL_Surface(软渲染[CPU])
               在SDL中,所有绘制在视频输出都是通过SDL_Sur对face对象来输出。一个图像,一段文字,一个视频都需要转换成SDL_Surface对象来操作,它们可以平铺,堆叠。他们所有数据最终要在一个叠加在表示screen 的SDL_Surface的对象中输出显示。
               SDL_Surface本质是一个矩形的像素内存,它需要通过专门的绘点函数来输出到不同设备上。其中SDL_Surface 的坐标系是左上角是原点,向下向左递增.
               一个带图形显示的的SDL程序(基本上所有都带),首先要初始化一个屏幕Surface.其余所有输出到屏幕的Surface数据都要填充到屏幕Surface上。

          SDL_Renderer
               SDL_Renderer是处理所有渲染的结构,在该范围内渲染SDL_Window。它还会跟踪与渲染相关的设置。

          SDL_Texture(硬渲染[GPU])
               SDL_Texture 与SDL_Surface 相似,也是一种缓冲区。只不过它存放的不是真正的像素数据,而是存放的图像的描述信息。这些描述信息通过OpenGL、D3D 或 Metal等技术操作GPU,从而绘制出与SDL_Surface一样的图形,且效率更高。

          SDL_Event
               SDL_Event是SDL中所有事件处理的核心。只要知道了事件类型对应SDL_Event结构的那个成员,使用它是一个简单的事情。


     2、SDL 视频渲染主要API

          初始化
               SDL_Init()
                    初始化 SDL。

               SDL_CreateWindow()
                    创建窗口(Window)

               SDL_CreateRenderer():
                    基于窗口创建渲染器(Render)

               SDL_CreateTexture()
                    创建纹理(Texture)


          循环渲染数据
               SDL_UpdateTexture()
                    设置纹理的数据。

               SDL_RenderCopy()
                    纹理复制给渲染器。

               SDL_RenderPresent()
                    显示。

     
          退出
               SDL_DestroyWindow()

               SDL_DestroyRenderer()

               SDL_DestroyTexture()

               SDL_Quit()

     
     

     3、SDL 主要扩展库

          SDL_image
               支持时下流行的图像格式: BMP、 PPM、 XPM、 PCX、 GIF、 JPEG、 PNG、 TGA。

          SDL_mixer
               更多的声音输出函数以及更多的声音格式支持。

          SDL_ttf
               TrueType 字体渲染支持。

          SDL_net
               网络支持。

          SDL_rtf
               简单的 RTF 渲染支持。

     
     

     4、子系统

          Video(图像)
               图像控制以及线程(thread) 和事件管理(event)

          Audio(声音)
               声音控制

          Joystick(摇杆)
               游戏摇杆控制

          CD-ROM(光盘驱动器)
               光盘媒体控制

          Window Management(视窗管理)
               与视窗程序设计集成

          Event(事件驱动)
               处理事件驱动

     
     

     5、SDL 用途

          视频
               * 3D 图形:
                    SDL 可以与 OpenGL API 或 Direct3D API 结合使用, 用于 3D 图形

               * 加速 2D 渲染 API:
                    支持简单旋转, 缩放和 Alpha 混合, 所有这些都使用最新的 3D API 加速。使用 OpenGL 和 Direct3D 支持加速。

               * 创建和管理多个窗口


          音频
               * 设置 8 位和 16 位音频, 单声道立体声或 5.1 环绕声的音频播放, 如果硬件不支持格式,可选择转换。

               * 音频在单独的线程中独立运行, 通过用户回调机制处理。

               * 专为自定义软件音频混音器而设计, 其中 SDL_mixer 提供完整的音频/音乐输出库。


          输入事件
               * 提供的事件和 API 方法如下:
                    应用程序和窗口状态更改
                    鼠标输入
                    键盘输入
                    操纵杆和游戏控制器输入
                    多点触控手势

               * 可以使用 SDL_EventState() 启用或禁用每个事件

               * 在发布到内部事件队列之前, 事件将通过用户指定的过滤器函数传递

               * 线程安全事件队列


          文件 I / O 抽象

               * 通用抽象开放, 读写数据

               * 内置支持文件和内存支持


          共享对象支持

               加载共享对象(Windows 上的 DLL, Mac OS X 上的.dylib, Linux 上的.so)

               共享对象中的查找方法,调用。


          线程
               简单线程创建 API

               简单线程本地存储 API

               互斥量, 信号量和条件变量

               用于无锁编程的原子操作

          计时器

               获取流逝的毫秒数

               等待指定的毫秒数

               在单独的线程中创建与代码并行运行的计时器

               使用高分辨率计数器进行分析

          CPU 特征检测

               查询 CPU 数量

               检测 CPU 功能和支持的指令集

          支持大小端检测

               检测当前系统的字节顺序

               用于快速交换数据值的例程

               读取和写入指定字节数据的数据

          电源管理

               查询电源管理状态

     

关注

笔者 - jxd

微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O

在这里插入图片描述

你可能感兴趣的:(SDL2,SDL2)