SDL :开放源代码的多媒体开发库

更新时间:2024-09-20 23:46

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

简介

Simple DirectMedia Layer ( SDL ) 是一个跨平台软件开发库,旨在为计算机多媒体硬件组件提供硬件抽象层。软件开发人员可以使用它来编写可以在Android、iOS、Linux、Mac OSWindows等多种操作系统上运行的高性能电脑游戏和其他多媒体应用程序。SDL的作者是Sam Lantinga, Loki Entertainment Software的主力程序员(Lead Programmer)。SDL 2.0 于 2013 年发布,与之前的版本有很大不同,提供更多用于 3D 硬件加速的机会,但打破了向后兼容性。

功能介绍

SDL提供了丰富的功能,包括视频、事件、音频、CD音频、线程和定时器等。

SDL 2.0 版本起,增加了对 Mir 和 Wayland 的支持,并在 SDL 2.0.4 中默认启用。2.0.4 版本还为 Android 提供了更好的支持。

SDL 的语法是基于函数的,所有操作都是通过向子程序(函数)传递参数来完成的。

SDL 分为几个子系统,包括基础、视频、输入事件、力反馈、音频、线程、计时器、文件抽象、共享对象支持、平台和 CPU 信息、电源管理等。

SDL支持的功能

视频

设置8bpp或更高的任意色彩深度的视频模式。如果某个模式硬件不支持,可以选择转化为另一模式。

直接写入线性的图像帧缓冲(framebuffer)。

用颜色键值(colorkey)或者alpha混合属性创建surface

Surface的blit能自动的转化为目标格式。blit是优化过的,并能使用硬件加速。x86平台上有针对MMX优化过的blit。

硬件加速的blit和fill(填充)操作,如果硬件支持的话。

事件

提供以下事件:

应用程序的visibility发生改变

键盘输入

鼠标输入

用户要求的退出

每种事件都能通过SDL_EventState() 关闭或者打开。

事件经由用户指定的过滤函数再被加入到内部的事件队列

线程安全的事件队列。

音频

设置8位和16位的音频,单声道或者立体声,如果格式硬件不支持,可以选择转换。

由独立的线程执行音频部分,并提供用户回调(callback)机制。

设计上考虑到了客户定制的软混音器,但实际上在例程中就包含了一个完整的音频/音乐输出库。

CD音频

完整的CD音频控制API

线程

简单的线程创建API

用于同步的简单的二进制信号量(semaphores)

定时器

读取已流逝的毫秒数。

等待指定的毫秒数。

设置一个10毫秒精度的周期性定时器。

字节序无关

侦测当前系统的字节序

快速转换数据的函数

读写指定字节序的数据

结构与特色

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

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

虽然SDL本身是使用c语言写成,但是它几乎可以被所有的编程语言所使用,例如:C++PerlPython(借由Pygame函式库)、Pascal等等,甚至是Euphoria、Pliant这类较不流行的编程语言也都可行。

软件应用

SDL在大型和小型项目中都得到广泛使用。例如,MobyGames 在 2013 年列出了 120 款使用 SDL 的游戏,而 SDL 网站本身在 2012 年列出了约 700 款游戏。SDL 用于教授多媒体计算机科学的大学课程,例如,2010 年卡迪兹大学使用 libSDL 的游戏编程研讨会,或 2015 年 UTFPR(蓬塔格罗萨校区)的游戏设计课程。此外,一些非视频游戏程序也使用 SDL;例如,模拟器,如 DOSBox、FUSE ZX Spectrum 模拟器和 VisualBoyAdvance。有几本书是为使用 SDL 开发而写的。

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: