SDL 简介

简介: SDL 简介 什么是SDL? 即 Simple DirectMedia Layer,使用 LGPL 许可证。 免费的跨平台多媒体应用编程接口 用于游戏、游戏开发工具、模拟器、样本演示、多媒体应用等 它能做什么? 视频、音频、事件、CDROM支持、线程、计时器、各种图象文件格式读取、快速绘图、混音、游戏杆支持、网络、MPEG解码等等,且CPU字节顺序无关。

SDL 简介

什么是SDL?

即 Simple DirectMedia Layer,使用 LGPL 许可证。

  • 免费的跨平台多媒体应用编程接口
  • 用于游戏、游戏开发工具、模拟器、样本演示、多媒体应用等

它能做什么?

视频、音频、事件、CDROM支持、线程、计时器、各种图象文件格式读取、快速绘图、混音、游戏杆支持、网络、MPEG解码等等,且CPU字节顺序无关。

大体上与DirectX比较对应关系如下:

  • SDL_Video、SDL_Image、OpenGL —— DirectDraw、Direct3D
  • SDL_Audio、SDL_Mixer —— DirectSound
  • SDL_Joystick、SDL_Base —— DirectInput
  • SDL_Net —— DirectPlay
  • SMPEG、SDL_Video、SDL_Audio、SDL_Sound、SDL_Filter —— DirectShow
  • 字体、窗口管理等其他实用工具和大量样例

支持哪些平台?

  • Linux 随系统安装
  • Win32 需一个到几个较小的DLL
  • BeOS
  • MacOS, MacOS X
  • 其他非官方移植

可以在哪些编程语言中使用?

几乎所有!SDL本身用 C 写成,有各种语言的接口。简单的函数调用,不需要COM。

个人观点(不代表任何团体和他人)

总的来说,SDL并不怎么优秀,但它是少数的DX替代品之一。有人会问为什么非得不用DX,也没有非得不用,至少懒人总是希望用更少的功夫做更多的事。对大多数人来说,无论DX、OpenGL还是SDL,都是低层API,尤其DX,如果您精通DX,那么恭喜,您的硬件知识一定也不错。留心的话就会发现今天的游戏很多都提供选项:Direct3D、OpenGL、Glide还是Software,既是说很多游戏厂商都根据需要设计了自己的高层API,底层是可以替换的。那么也许有人说水平高的厂商都是充分开发硬件功能才有高性能的表现,那么我举个例子,很多2D游戏的渲染虽然用了DirectDraw,但却是纯软件在内存帧缓冲区渲染,最后调用DirectDraw将图象Swap到屏幕。对于2D游戏加今天的机器配置,GDI加直接帧缓冲操作已经足够,需要更先进的渲染能力时就要使用3D技术,这也是在DX8中DirectDraw和Direct3D都被基于3D的DirectGraphics替换掉的原因。但最主要的是,选择SDL意味着跨平台。

回到正题。象DX一样,SDL的各个部分是可以单独使用的,但必须有SDL_Base。窗口消息管理方式很古董,写过Win32程序的一定还记得switch...case,没错SDL用就是这个,但完全可以不用它的。SDL的 C 风格很浓,就像DirectX的COM风格很浓一样,用非 C 类语言的人会更愿意封装一下再用。

与DX相比,SDL有更快的启动速度,方便的调试(调试过DX程序吗?:( ),简洁的接口,很小的运行时库,当然首要的是跨平台。SDL直接支持很多媒体文件格式,与DX比起来非常的方便。但SDL即简单直接访问媒体层,不象DX支持那么多功能,当然也因为不是每个平台都能提供那么多功能。

样例代码上说,比起DX,SDL的样例非常短小精悍,程序流程是直线式,效果上一点也不差。非C语言的翻译版本保留了C的风格,没有利用先进的语言特性,是个遗憾。至于帮助文件,绝对不如DirectX,很多有用的信息是头文件里的注释。但毕竟 C 接口比COM简单得多,看看函数名和样例也就会用了。但没有中文资料,不爱看英文的可能会头痛。可能的话大家分工翻译一下,毕竟比DX文档少多了。

详细信息在哪里?

http://www.libsdl.org/ SDL首页

http://www.delphi-jedi.org/Jedi:TEAM_SDL_HOME:20450 Delphi接口项目首页

http://jsdl.sourceforge.net/ Java接口首页

http://csgl.sourceforge.net C#接口首页

http://phpsdl.sourceforge.net php接口首页

使用SDL的游戏有哪些?

http://www.libsdl.org/games.php 有个列表,总之非常多。

目录
相关文章
|
前端开发 小程序 JavaScript
微信小程序-Unhandled promise rejection TypeError: Cannot read property ‘get‘ of undefined
微信小程序-Unhandled promise rejection TypeError: Cannot read property ‘get‘ of undefined
|
12月前
|
算法 Java
JAVA并发编程系列(8)CountDownLatch核心原理
面试中的编程题目“模拟拼团”,我们通过使用CountDownLatch来实现多线程条件下的拼团逻辑。此外,深入解析了CountDownLatch的核心原理及其内部实现机制,特别是`await()`方法的具体工作流程。通过详细分析源码与内部结构,帮助读者更好地理解并发编程的关键概念。
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
|
11月前
|
数据采集 存储 人工智能
cdga|数据治理:应对核心业务数据质量参差不齐的挑战与策略
数据治理是指通过制定并实施一系列政策、流程和技术手段,确保数据的可用性、完整性、准确性和安全性,以支持企业的决策和业务运营。对于核心业务数据质量参差不齐的问题,数据治理的重要性不言而喻
|
数据采集 自然语言处理
在ModelScope中进行情感分析模型的微调
在ModelScope中进行情感分析模型的微调
281 4
|
机器学习/深度学习 算法 PyTorch
算法金 | 这次终于能把张量(Tensor)搞清楚了!
本文是关于PyTorch中张量(Tensor)的入门教程,由全网同名\[算法金\]作者撰写。文章介绍了张量的基础概念,强调其在深度学习中的核心地位,并阐述了张量与向量、矩阵的关系。接着,详细讲解了如何在PyTorch中创建和操作张量,包括张量的数学运算、广播机制、索引切片以及变形与重塑。此外,还涉及张量的高级功能,如自动求导系统和高级数学函数。最后,文章提到了张量在深度学习中的应用、性能优化技巧和调试方法,鼓励读者通过实践提升技能。
1572 1
算法金 | 这次终于能把张量(Tensor)搞清楚了!
|
缓存 JSON JavaScript
深入理解RESTful API设计原则与最佳实践
- REST是一种基于HTTP的Web服务设计风格,强调资源、统一接口和无状态性。 - 设计原则:统一接口(资源标识、操作、自描述消息、无状态),资源中心,标准方法,分层系统和缓存。 - 最佳实践:版本控制、JSON格式、有意义的状态码、HATEOAS和安全性(HTTPS,认证,授权)。 - 示例:使用Node.js和Express实现用户管理API,包括GET、POST、PUT和DELETE操作,展示资源操作的基本实现。 代码示例展示了如何创建、读取、更新和删除用户资源,以及处理HTTP状态码和错误情况。实际应用时,需进一步完善安全和性能优化。
1937 0
|
canal SQL 关系型数据库
flink cdc 提交问题之提交任务异常如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
开发工具 git
git branch之后出现end,无法退出终端
git branch之后出现end,无法退出终端
919 0
git branch之后出现end,无法退出终端
|
开发者 iOS开发
苹果证书分类及作用详解,助力开发者高效管理应用程序
本文将详细介绍苹果证书的作用及分类,包括企业证书、开发者证书、 推送证书、分发证书和MDM证书,帮助开发者了解如何正确使用和管理这些证书, 提升应用程序的开发和发布效率。