1@page SDL2 SDL2 2 3**[更正文档](https://gitee.com/alios-things/SDL2/edit/master/README.md)**      **[贡献说明](https://help.aliyun.com/document_detail/302301.html)** 4 5# 概述 6Simple DirectMedia Layer是一个跨平台开发库,旨在通过OpenGL和Direct3D提供对音频,键盘,鼠标,操纵杆和图形硬件的低级访问。视频播放软件,仿真器和受欢迎的游戏(包括Valve屡获殊荣的目录和许多Humble Bundle游戏)都使用它。 7 8SDL正式支持Windows,Mac OS X,Linux,iOS和Android。在源代码中可以找到对其他平台的支持。 9 10SDL用C编写,可与C ++一起使用,并且有绑定可用于其他几种语言,包括C#和Python。 11 12## 版权信息 13> zlib license 14 15## 目录结构 16```tree 17├── acinclude 18│ ├── ac_check_define.m4 19│ ├── alsa.m4 20│ ├── ax_check_compiler_flags.m4 21│ ├── ax_gcc_archflag.m4 22│ ├── ax_gcc_x86_cpuid.m4 23│ ├── esd.m4 24│ ├── libtool.m4 25│ ├── lt~obsolete.m4 26│ ├── ltoptions.m4 27│ ├── ltsugar.m4 28│ ├── ltversion.m4 29│ └── pkg_config.m4 30├── autogen.sh 31├── BUGS.txt 32├── build-scripts 33│ ├── androidbuildlibs.sh 34│ ├── androidbuild.sh 35│ ├── checker-buildbot.sh 36│ ├── config.guess 37│ ├── config.sub 38│ ├── config.sub.patch 39│ ├── emscripten-buildbot.sh 40│ ├── gcc-fat.sh 41│ ├── g++-fat.sh 42│ ├── install-sh 43│ ├── iosbuild.sh 44│ ├── ltmain.sh 45│ ├── mkinstalldirs 46│ ├── nacl-buildbot.sh 47│ ├── naclbuild.sh 48│ ├── os2-buildbot.sh 49│ ├── raspberrypi-buildbot.sh 50│ ├── showrev.sh 51│ ├── strip_fPIC.sh 52│ ├── update-copyright.sh 53│ ├── updaterev.sh 54│ ├── windows-buildbot-zipper.bat 55│ ├── winrtbuild.bat 56│ └── winrtbuild.ps1 57├── CMakeLists.txt 58├── Config.in 59├── config.status 60├── configure 61├── COPYING.txt 62├── CREDITS.txt 63├── docs 64│ ├── doxyfile 65│ ├── README-android.md 66│ ├── README-cmake.md 67│ ├── README-directfb.md 68│ ├── README-dynapi.md 69│ ├── README-emscripten.md 70│ ├── README-gesture.md 71│ ├── README-hg.md 72│ ├── README-ios.md 73│ ├── README-linux.md 74│ ├── README-macosx.md 75│ ├── README.md 76│ ├── README-nacl.md 77│ ├── README-pandora.md 78│ ├── README-platforms.md 79│ ├── README-porting.md 80│ ├── README-psp.md 81│ ├── README-raspberrypi.md 82│ ├── README-touch.md 83│ ├── README-wince.md 84│ ├── README-windows.md 85│ └── README-winrt.md 86├── include 87│ ├── begin_code.h 88│ ├── close_code.h 89│ ├── SDL_assert.h 90│ ├── SDL_atomic.h 91│ ├── SDL_audio.h 92│ ├── SDL_bits.h 93│ ├── SDL_blendmode.h 94│ ├── SDL_clipboard.h 95│ ├── SDL_config_android.h 96│ ├── SDL_config.h 97│ ├── SDL_config.h.cmake 98│ ├── SDL_config.h.in 99│ ├── SDL_config_iphoneos.h 100│ ├── SDL_config_macosx.h 101│ ├── SDL_config_minimal.h 102│ ├── SDL_config_os2.h 103│ ├── SDL_config_pandora.h 104│ ├── SDL_config_psp.h 105│ ├── SDL_config_windows.h 106│ ├── SDL_config_winrt.h 107│ ├── SDL_config_wiz.h 108│ ├── SDL_copying.h 109│ ├── SDL_cpuinfo.h 110│ ├── SDL_egl.h 111│ ├── SDL_endian.h 112│ ├── SDL_error.h 113│ ├── SDL_events.h 114│ ├── SDL_filesystem.h 115│ ├── SDL_gamecontroller.h 116│ ├── SDL_gesture.h 117│ ├── SDL.h 118│ ├── SDL_haptic.h 119│ ├── SDL_hints.h 120│ ├── SDL_joystick.h 121│ ├── SDL_keyboard.h 122│ ├── SDL_keycode.h 123│ ├── SDL_loadso.h 124│ ├── SDL_locale.h 125│ ├── SDL_log.h 126│ ├── SDL_main.h 127│ ├── SDL_messagebox.h 128│ ├── SDL_metal.h 129│ ├── SDL_mouse.h 130│ ├── SDL_mutex.h 131│ ├── SDL_name.h 132│ ├── SDL_opengles2_gl2ext.h 133│ ├── SDL_opengles2_gl2.h 134│ ├── SDL_opengles2_gl2platform.h 135│ ├── SDL_opengles2.h 136│ ├── SDL_opengles2_khrplatform.h 137│ ├── SDL_opengles.h 138│ ├── SDL_opengl_glext.h 139│ ├── SDL_opengl.h 140│ ├── SDL_pixels.h 141│ ├── SDL_platform.h 142│ ├── SDL_power.h 143│ ├── SDL_quit.h 144│ ├── SDL_rect.h 145│ ├── SDL_render.h 146│ ├── SDL_revision.h 147│ ├── SDL_rwops.h 148│ ├── SDL_scancode.h 149│ ├── SDL_sensor.h 150│ ├── SDL_shape.h 151│ ├── SDL_stdinc.h 152│ ├── SDL_surface.h 153│ ├── SDL_system.h 154│ ├── SDL_syswm.h 155│ ├── SDL_test_assert.h 156│ ├── SDL_test_common.h 157│ ├── SDL_test_compare.h 158│ ├── SDL_test_crc32.h 159│ ├── SDL_test_font.h 160│ ├── SDL_test_fuzzer.h 161│ ├── SDL_test.h 162│ ├── SDL_test_harness.h 163│ ├── SDL_test_images.h 164│ ├── SDL_test_log.h 165│ ├── SDL_test_md5.h 166│ ├── SDL_test_memory.h 167│ ├── SDL_test_random.h 168│ ├── SDL_thread.h 169│ ├── SDL_timer.h 170│ ├── SDL_touch.h 171│ ├── SDL_ttf.h 172│ ├── SDL_types.h 173│ ├── SDL_version.h 174│ ├── SDL_video.h 175│ └── SDL_vulkan.h 176├── src 177│ ├── atomic 178│ ├── audio 179│ ├── core 180│ ├── cpuinfo 181│ ├── dynapi 182│ ├── events 183│ ├── file 184│ ├── filesystem 185│ ├── gfx 186│ ├── haptic 187│ ├── hidapi 188│ ├── image 189│ ├── joystick 190│ ├── libm 191│ ├── loadso 192│ ├── locale 193│ ├── main 194│ ├── power 195│ ├── render 196│ ├── SDL_assert.c 197│ ├── SDL_assert_c.h 198│ ├── SDL.c 199│ ├── SDL_dataqueue.c 200│ ├── SDL_dataqueue.h 201│ ├── SDL_error.c 202│ ├── SDL_error_c.h 203│ ├── SDL_hints.c 204│ ├── SDL_hints_c.h 205│ ├── SDL_internal.h 206│ ├── SDL_log.c 207│ ├── sensor 208│ ├── stdlib 209│ ├── test 210│ ├── thread 211│ ├── timer 212│ ├── ttf 213│ └── video 214├── test 215``` 216>具体可参考http://wiki.libsdl.org/ 了解SDL的具体内容 217 218## 依赖组件 219 220* freetype 221* udisplay 222 223# 常用配置 224```yaml 225def_config: # 组件的可配置项 226 __ALIOS__: 1 227 LOAD_JPG: 1 228 LOAD_BMP: 1 229 LOAD_PNG: 1 230 __native_client__: 1 231 AOS_COMP_SDL2: 1 232 AOS_COMP_UDISPLAY: 1 233``` 234> 默认打开支持jpg/bmp/png图像绘制,以及使用udisplay组件进行framebuffer显示 235 236# API说明 237SDL2提供了丰富的API接口,支持audio/video/input等设备操作接口,请参考: 238http://wiki.libsdl.org/CategoryAPI 239 240# 使用示例 241 242组件使用示例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考[《AliOS Things集成开发环境使用说明之搭建开发环境》](https://help.aliyun.com/document_detail/302378.html),下载安装。 243待开发环境搭建完成后,可以按照以下步骤进行示例的测试。 244 245## 步骤1 创建或打开工程 246 247**打开已有工程** 248 249如果用于测试的案例工程已存在,可参考[《AliOS Things集成开发环境使用说明之打开工程》](https://help.aliyun.com/document_detail/302381.html)打开已有工程。 250 251**创建新的工程** 252 253组件的示例代码可以通过编译链接到AliOS Things的任意案例(solution)来运行,这里选择helloworld_demo案例。helloworld_demo案例相关的源代码下载可参考[《AliOS Things集成开发环境使用说明之创建工程》](https://help.aliyun.com/document_detail/302379.html)。 254 255## 步骤2 添加组件 256 257案例下载完成后,需要在helloworld_demo组件的package.yaml中添加对组件的依赖: 258 259```yaml 260 261depends: 262 - SDL2: master # helloworld_demo组件中引入SDL2组件 263 - ili9341: master # helloworld_demo 中引入ili9341屏幕驱动 264 265def_config: 266 CLI_IOBOX_ENABLE: 1 # 可选:使能文件系统测试命令,例如ls, ll, mkdir, touch, echo等 267 268``` 269 270## 步骤3 下载组件 271 272在已安装了 的开发环境工具栏中,选择Terminal -> New Terminal启动终端,并且默认工作路径为当前工程的workspace,此时在终端命令行中输入: 273 274```shell 275 276aos install SDL2 277 278``` 279 280上述命令执行成功后,组件源码则被下载到了./components/SDL2路径中。 281 282## 步骤4 添加示例 283请参考[ugraphics](https://gitee.com/alios-things/ugraphics)组件的测试示例。 284 285## 步骤5 编译固件 286 287在示例代码已经添加至组件的配置文件,并且helloworld_demo已添加了对该组件的依赖后,就可以编译helloworld_demo案例来生成固件了,具体编译方法可参考[《AliOS Things集成开发环境使用说明之编译固件》](https://help.aliyun.com/document_detail/302384.html)。 288 289## 步骤6 烧录固件 290 291上述步骤执行后,可参考[《AliOS Things集成开发环境使用说明之烧录固件》](https://help.aliyun.com/document_detail/302383.html)来烧录固件。 292 293## 步骤7 打开串口 294 295固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考[《AliOS Things集成开发环境使用说明之查看日志》](https://help.aliyun.com/document_detail/302382.html)。 296 297当串口终端打开成功后,可在串口中输入help来查看已添加的测试命令。 298 299## 步骤8 测试示例 300在AliOS Things中ugraphics组件对SDL2中部分图像、字体相关接口进行了封装,请参考请参考[ugraphics](https://gitee.com/alios-things/ugraphics)组件的测试示例。 301 302# FAQ 303NA 304