[音视频播放] 什么是SDL,它能做什么?

什么是SDL,它能做什么?
Simple Directmedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of "Civilization: Call To Power."

SDL supports Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. The code contains support for AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS, and OS/2, but these are not officially supported.

SDL is written in C, but works with C++ natively, and has bindings to several other languages, including Ada, C#, D, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, Smalltalk, and Tcl.

SDL is distributed under GNU LGPL version 2. This license allows you to use SDL freely in commercial programs as long as you link with the dynamic library.

如何使用SDL编写程序?
配置开发环境:

任何开发环境的配置都是千篇一律的,安装相应的SDL开发包,如果是在FreeBSD上,你就编译SDL的相关Port至于它们在哪里,怎么编译,不罗嗦 了。安装好以后,你可以得到一个叫sdl-config的东西,它会帮助你找到你所需要包含的头文件和所要链接的动态链接库。它们的参数分别是:"-- cflags"和"--libs"

编写Makefile:
这里有一个我写的Makefile文档,你可以修改一下就可以用了。至于更详细的内容建议找本关于Makefile的书读一读。我推荐一本:O'Reilly Taiwan公司出版的《GNU Make 项目管理》(东南大学出版社)

SDL程序框架:
首先看下面的代码:

SDL_Surface *screen;int main(int argc, char *argv[]){
  srand(time(NULL));
  if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
  {
    fprintf(stderr,                   "Couldn't initialize SDL:%s\n",                  SDL_GetError());
    exit(1);
  }
  screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
  if ( screen == NULL )
  {
    fprintf(stderr,                   "Couldn't set display mode:%s\n",                  SDL_GetError());
    SDL_Quit();
    exit(5);
  }
     // add codes in here.
  SDL_Quit();
  exit(0);
}
这是一个SDL程序的基本框架。它完成了SDL库的初始化,然后什么都没干就退出了。虽然它很简单,但是我们毕竟迈出了第一步。下面我们来看看它每是怎么初始化的。

首先我们定义了一个SDL_Surface指针,我们可以将它理解为用来显示我们的程序的所有输出的"屏幕"。SDL_Init函数用来开启SDL模式, 这里的参数是SDL_INIT_VIDEO我们开启的SDL视频模式,除了SDL视频模式,SDL还支持四种其它的模式。当我们成功开启了SDL视频模式 后,我们需要作一些必要的设置,我们将输出模式设置为640x480的屏幕大小(象不象以前玩的游戏的标准模式的屏幕大小?)但这一切参数都设置好了以 后,我们就可以把它当做一个通道或者屏幕,然后向它输出点什么了!现在什么都没有做,然后调用SDL_Quit()函数退出了SDL模式。

第一个SDL程序:
这个程序就在前面的框架上进行扩展,我们首先用一种方式向那个设置好的屏幕输出一张图片看看能否在那上面显示:

SDL_Surface *screen;
SDL_Surface *img_hander;
SDL_Surface  * load_image(char *filename ) {
SDL_Surface *loadedImage  =  NULL;
SDL_Surface *optimizedImage  =  NULL;
loadedImage  =  IMG_Load(filename);
     if ( loadedImage  !=  NULL )
    {
    optimizedImage  =  SDL_DisplayFormat(loadedImage);
    SDL_FreeSurface( loadedImage );
}
     return  optimizedImage;
}

void  apply_surface(SDL_Surface *source,
                    SDL_Surface *destinaion,
                    int posx,
                    int posy)
{
  SDL_Rect rect;
  rect.x = posx;
  rect.y = posy;
  SDL_BlitSurface(source,NULL,destinaion, & rect);
}

int main(int argc, char *argv[])
{
  srand(time(NULL));
  if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
  {
    fprintf(stderr,                   "Couldn't initialize SDL:%s\n",                  SDL_GetError());
    exit(1);
  }
  screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
  if ( screen == NULL )
  {
    fprintf(stderr,                   "Couldn't set display mode:%s\n",                  SDL_GetError());
    SDL_Quit();
    exit(5);
  }
  img_hander = load_image( "flag.jpg" );
  apply_surface(screen,img_hander,0,0);
     if(SDL_Flip(screen) ==- 1 )
   return   - 1 ;
  SDL_FreeSurface(img_hander);
  SDL_Delay( 2000 );
  SDL_Quit();
  exit(0);

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDL是Simple DirectMedia Layer(简易直控媒体层)的缩写。它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。这些多媒体功能包括了音频、键盘和鼠标(事件)、游戏摇杆等。当然,最为重要的是提供了2D图形帧缓冲(framebuffer)的接口,以及为OpenGL与各种操作系统之间提供了统一的标准接口以实现3D图形。从这些属性我们可以看出,SDL基本上可以认为是为以电脑游戏为核心开发的多媒体库。 SDL支持主流的操作系统,包括Windows和Linux。在官方的介绍中,我们可以找到它所支持的其他平台。(SDL supports Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. )。SDL本身从C语言开发,并且能很好的在C++等高级语言中使用。在官方可以看到SDL所支持的语言很多。(Including Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, Smalltalk, and Tcl. ) SDL在GNU LGPL version 2下发布,这意味着你可以免费的使用。并且可以免费的用于商业软件的制作(只要你直接使用SDL的动态链接库,Windows下的SDL.dll)。如果你将SDL库编译进了自己的二进制代码中,你需要指明你所使用的SDL库的版本以及包括你自己修改的源代码,并说明这些代码的原始出处。这是很宽松的法律,你可以用如此强大的多媒体库完全合法的免费开发商业游戏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值