SDL系列讲解(一) 简介

2018-02-02 10:42:50 浏览数 (1)

什么是 SDL

Simple DirectMedia Layer(SDL)是一个跨平台开发库,主要提供对音频,键盘,鼠标,操纵杆的操作,通过OpenGL和Direct3D来实现直接访问图像硬件。 主要应用在视频播放软件,模拟器和游戏开发。SDL官方支持Windows,Mac OS X,Linux,iOS和Android。在源代码中可以找到对其他平台的支持。

SDL是用C编写的,我们可以使用C 开发,同时SDL也绑了一些其他几种语言,包括C#和Python。

这个库是分布在zlib许可证下,可以找到在文件“COPYING.txt”。如果想要快速的掌握SDL,去阅读下头文件以及test下的测试代码,那里面有更多示例教程,以及很好的注释,帮助你去学习,理解,掌握.

SDL库分为 Video、Audio、CD-ROM、Game、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”,具体如下:

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

SDL_mixer—更多的声音输出函数以及更多的声音格式支持。支持常见的WAV,MP3,OGG等基础格式。

SDL_net—网络支持。

SDL_ttf—TrueType字体渲染支持。

SDL_rtf—简单的RTF渲染支持

SDL 子系统

SDL将功能分成下列数个子系统(subsystem):

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

Audio(声音)—声音控制 Joystick(摇杆)—游戏摇杆控制 CD-ROM(光盘驱动器)—光盘媒体控制 Window Management(视窗管理)-与视窗程序设计集成,不过android默认就是对应的surfaceView的窗口,只允许存在一个。 Event(事件驱动)-处理事件驱动

haptic 触摸事件响应

Time 时间管理

SDL 整体框架

SDL的整个框架结构:这里我们可以看到,SDL是个跨平台多支持的渲染框架,完成在硬件驱动层之上的抽离,实现Window linux Android等一系列平台的适配。如此,我们可以使用SDL完成我们的逻辑开发,便可以快速编译到各个平台,实现跨平台。

SDL 可以干什么

视频 3D图形: SDL可以与OpenGL API或Direct3D API结合使用,用于3D图形 加速2D渲染API: 支持简单旋转,缩放和Alpha混合,所有这些都使用最新的3D API加速 使用OpenGL和Direct3D支持加速 创建和管理多个窗口 输入事件 提供的事件和API方法如下: 应用程序和窗口状态更改 鼠标输入 键盘输入 操纵杆和游戏控制器输入 多点触控手势 可以使用SDL_EventState()启用或禁用每个事件 在发布到内部事件队列之前,事件将通过用户指定的过滤器函数传递 线程安全事件队列 音频 设置8位和16位音频,单声道立体声或5.1环绕声的音频播放,如果硬件不支持格式,可选择转换 音频在单独的线程中独立运行,通过用户回调机制处理 专为自定义软件音频混音器而设计,其中SDL_mixer提供完整的音频/音乐输出库 文件I / O抽象 通用抽象开放,读写数据 内置支持文件和内存支持 共享对象支持 加载共享对象(Windows上的DLL,Mac OS X上的.dylib,Linux上的.so) 共享对象中的查找方法,调用 线程 简单线程创建API 简单线程本地存储API 互斥量,信号量和条件变量 用于无锁编程的原子操作 计时器 获取流逝的毫秒数 等待指定的毫秒数 在单独的线程中创建与代码并行运行的计时器 使用高分辨率计数器进行分析 CPU特征检测 查询CPU数量 检测CPU功能和支持的指令集 支持大小端检测 检测当前系统的字节顺序 用于快速交换数据值的例程 读取和写入指定字节数据的数据 电源管理 查询电源管理状态

SDL的总体概况

SDL主要围绕着实现一套快速渲染的框架,同时能够兼容更多平台。除了渲染之外,做了一些外围扩展,比如播放更多音频格式,支持渲染TTF字体,支持加载更多图片格式,同时实现了网络请求。除此之外,SDL直接能做的事情确实比较少,需要我们自己去扩展,去将三方的其他库封装过来,以便提供更强大的开发支撑。

从现在开始,我会带领大家,一起领略SDL的风采,在快速学习掌握使用的基础上,进行原理学习,技能扩展,提升。本书会从Android平台进行切入,讲解。

在完成原理,使用讲解之后,我会移植一些开源库,来支援SDL框架,使得SDL可以开发简单,轻量级别的游戏。

0 人点赞