PSP编程开发学习笔记(一):SDL介绍



掌叔
2009-02-18 09:28:23

摘自:[url]http://blog.sina.com.cn/jesil[/url]
作者:嫣雨华源

PSP的编程是需要交叉编译的,即在PC上编译好程序直接拿到PSP上运行。网上提供了很多方案来提供这种交叉编译平台。某天偶然发现有SDL这么个东西,搜索资料后,发现SDL在游戏方面应用还是挺广的,初步运行了一下hello world,发现这个库的可视化界面做得不错,有了这个就不用每次编译完程序还得拷贝到PSP上看效果,于是开始深入研究。首先给出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是自由跨平台的多媒体开发包,由于是免费的,而且开源,所以很适合给PSP编程。SDL的功能具体有哪些?SDL的官网给出了我们答案:


视频

* 设置8bpp或更高的任意色彩深度的视频模式。如果某个模式硬件不支持,可以选择转化为另一模式。
* 直接写入线性的图像帧缓冲(framebuffer)。
* 用颜色键值(colorkey)或者alpha混合属性创建surface。
* Surface的blit能自动的转化为目标格式。blit是优化过的,并能使用硬件加速。x86平台上有针对MMX优化过的blit。
* 硬件加速的blit和fill(填充)操作,如果硬件支持的话。

提示:
你可以分别用SDL_WM_SetCaption()和 SDL_WM_SetIcon() 设置程序的标题栏和图标(如果有的话) 。
事件

* 提供以下事件:
o 应用程序的visibility发生改变
o 键盘输入
o 鼠标输入
o 用户要求的退出
* 每种事件都能通过SDL_EventState()关闭或者打开。
* 事件经由用户指定的过滤函数再被加入到内部的事件队列。
* 线程安全的事件队列。

提示:
调用SDL_PeepEvents() 在事件队列中搜索特定类型的事件。
音频

* 设置8位和16位的音频,单声道或者立体声,如果格式硬件不支持,可以选择转换。
* 由独立的线程执行音频部分,并提供用户回调(callback)机制。
* 设计上考虑到了客户定制的软混音器,但实际上在例程中就包含了一个完整的音频/音乐输出库。

提示:
用 SDL_LockAudio() 和 SDL_UnlockAudio()对音频回调函数和程序其他部分都要访问到的数据进行同步。
CD音频

* 完整的CD音频控制API

提示:
如果向CD-ROM API传递一个NULL CD-ROM句柄,结果将是最后被打开的CD-ROM执行相应的动作。
线程

* 简单的线程创建API
* 用于同步的简单的二进制信号量(semaphores)

提示:
在线程中不要使用I/O和内存管理这样的C函数库,除非你能采取必要的措施—— 因为这些函数会把其他线程使用的资源锁定。
定时器

* 读取已流逝的毫秒数。
* 等待指定的毫秒数。
* 设置一个10毫秒精度的周期性定时器。

提示:
Win32上的GetTickCount() 可以很方便的用 SDL_GetTicks()替代。
字节序无关

* 侦测当前系统的字节序
* 快速转换数据的函数
* 读写指定字节序的数据



由于SDL提供中文部分的说明,所以大家如果有兴趣可以直接去官网上搜索相关的资料,教程什么的都有,官网地址如下[url]http://www.libsdl.org/[/url]