SDL系列讲解(一) 简介
什么是 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)