SDL(Simple DirectMedia Layer)

转自 http://blog.csdn.net/mplus/article/details/7034628


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

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


结构与特色

SDL在作业平台上的结构图
SDL的系统调用层次

虽然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等等,甚至是EuphoriaPliant这类较不流行的编程语言也都可行。

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

[编辑]语法与子系统

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

  • Video(图像)—图像控制以及运行绪(thread)和事件管理(event)。
  • Audio(声音)—声音控制
  • Joystick(摇杆)—游戏摇杆控制
  • CD-ROM(光盘驱动器)—光盘媒体控制
  • Window Management(视窗管理)-与视窗程序设计集成
  • Event(事件驱动)-处理事件驱动

以下是一支用C语言写成、非常简单的SDL示例:

// Headers
#include "SDL.h"

// Main function
int main(int argc, char* argv[])
{
    // Initialize SDL
    if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
        return( 1 );

    // Delay 2 seconds
    SDL_Delay( 2000 );

    // Quit SDL
    SDL_Quit();

    // Return
    return( 0 );
}

上述程序会加载所有SDL子系统(出错则退出程序),然后暂停两秒,最后关闭SDL并退出程序。

[编辑]与DirectX比较

与DirectX比较对应关系如下:


SDLDirectX说明
SDL_Video、SDL_Image、OpenGLDirectDraw、Direct3D 
SDL_Audio、SDL_MixerDirectSound 
SDL_Joystick、SDL_BaseDirectInput 
SDL_NetDirectPlay 
SMPEG、SDL_Video、SDL_Audio、SDL_Sound、SDL_FilterDirectShow

详参考 维科百科 http://zh.wikipedia.org/wiki/SDL

http://www.libsdl.org/download-1.2.php(源代码及可执行文件)


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值