概述
Simple DirectMedia Layer是一个跨平台开发库,旨在通过OpenGL和Direct3D提供对音频,键盘,鼠标,操纵杆和图形硬件的低级访问。视频播放软件,仿真器和受欢迎的游戏(包括Valve屡获殊荣的目录和许多Humble Bundle游戏)都使用它。
SDL正式支持Windows,Mac OS X,Linux,iOS和Android。在源代码中可以找到对其他平台的支持。
SDL用C编写,可与C ++一起使用,并且有绑定可用于其他几种语言,包括C#和Python。
版权信息
zlib license
目录结构
├── acinclude
│ ├── ac_check_define.m4
│ ├── alsa.m4
│ ├── ax_check_compiler_flags.m4
│ ├── ax_gcc_archflag.m4
│ ├── ax_gcc_x86_cpuid.m4
│ ├── esd.m4
│ ├── libtool.m4
│ ├── lt~obsolete.m4
│ ├── ltoptions.m4
│ ├── ltsugar.m4
│ ├── ltversion.m4
│ └── pkg_config.m4
├── autogen.sh
├── BUGS.txt
├── build-scripts
│ ├── androidbuildlibs.sh
│ ├── androidbuild.sh
│ ├── checker-buildbot.sh
│ ├── config.guess
│ ├── config.sub
│ ├── config.sub.patch
│ ├── emscripten-buildbot.sh
│ ├── gcc-fat.sh
│ ├── g++-fat.sh
│ ├── install-sh
│ ├── iosbuild.sh
│ ├── ltmain.sh
│ ├── mkinstalldirs
│ ├── nacl-buildbot.sh
│ ├── naclbuild.sh
│ ├── os2-buildbot.sh
│ ├── raspberrypi-buildbot.sh
│ ├── showrev.sh
│ ├── strip_fPIC.sh
│ ├── update-copyright.sh
│ ├── updaterev.sh
│ ├── windows-buildbot-zipper.bat
│ ├── winrtbuild.bat
│ └── winrtbuild.ps1
├── CMakeLists.txt
├── Config.in
├── config.status
├── configure
├── COPYING.txt
├── CREDITS.txt
├── docs
│ ├── doxyfile
│ ├── README-android.md
│ ├── README-cmake.md
│ ├── README-directfb.md
│ ├── README-dynapi.md
│ ├── README-emscripten.md
│ ├── README-gesture.md
│ ├── README-hg.md
│ ├── README-ios.md
│ ├── README-linux.md
│ ├── README-macosx.md
│ ├── README.md
│ ├── README-nacl.md
│ ├── README-pandora.md
│ ├── README-platforms.md
│ ├── README-porting.md
│ ├── README-psp.md
│ ├── README-raspberrypi.md
│ ├── README-touch.md
│ ├── README-wince.md
│ ├── README-windows.md
│ └── README-winrt.md
├── include
│ ├── begin_code.h
│ ├── close_code.h
│ ├── SDL_assert.h
│ ├── SDL_atomic.h
│ ├── SDL_audio.h
│ ├── SDL_bits.h
│ ├── SDL_blendmode.h
│ ├── SDL_clipboard.h
│ ├── SDL_config_android.h
│ ├── SDL_config.h
│ ├── SDL_config.h.cmake
│ ├── SDL_config.h.in
│ ├── SDL_config_iphoneos.h
│ ├── SDL_config_macosx.h
│ ├── SDL_config_minimal.h
│ ├── SDL_config_os2.h
│ ├── SDL_config_pandora.h
│ ├── SDL_config_psp.h
│ ├── SDL_config_windows.h
│ ├── SDL_config_winrt.h
│ ├── SDL_config_wiz.h
│ ├── SDL_copying.h
│ ├── SDL_cpuinfo.h
│ ├── SDL_egl.h
│ ├── SDL_endian.h
│ ├── SDL_error.h
│ ├── SDL_events.h
│ ├── SDL_filesystem.h
│ ├── SDL_gamecontroller.h
│ ├── SDL_gesture.h
│ ├── SDL.h
│ ├── SDL_haptic.h
│ ├── SDL_hints.h
│ ├── SDL_joystick.h
│ ├── SDL_keyboard.h
│ ├── SDL_keycode.h
│ ├── SDL_loadso.h
│ ├── SDL_locale.h
│ ├── SDL_log.h
│ ├── SDL_main.h
│ ├── SDL_messagebox.h
│ ├── SDL_metal.h
│ ├── SDL_mouse.h
│ ├── SDL_mutex.h
│ ├── SDL_name.h
│ ├── SDL_opengles2_gl2ext.h
│ ├── SDL_opengles2_gl2.h
│ ├── SDL_opengles2_gl2platform.h
│ ├── SDL_opengles2.h
│ ├── SDL_opengles2_khrplatform.h
│ ├── SDL_opengles.h
│ ├── SDL_opengl_glext.h
│ ├── SDL_opengl.h
│ ├── SDL_pixels.h
│ ├── SDL_platform.h
│ ├── SDL_power.h
│ ├── SDL_quit.h
│ ├── SDL_rect.h
│ ├── SDL_render.h
│ ├── SDL_revision.h
│ ├── SDL_rwops.h
│ ├── SDL_scancode.h
│ ├── SDL_sensor.h
│ ├── SDL_shape.h
│ ├── SDL_stdinc.h
│ ├── SDL_surface.h
│ ├── SDL_system.h
│ ├── SDL_syswm.h
│ ├── SDL_test_assert.h
│ ├── SDL_test_common.h
│ ├── SDL_test_compare.h
│ ├── SDL_test_crc32.h
│ ├── SDL_test_font.h
│ ├── SDL_test_fuzzer.h
│ ├── SDL_test.h
│ ├── SDL_test_harness.h
│ ├── SDL_test_images.h
│ ├── SDL_test_log.h
│ ├── SDL_test_md5.h
│ ├── SDL_test_memory.h
│ ├── SDL_test_random.h
│ ├── SDL_thread.h
│ ├── SDL_timer.h
│ ├── SDL_touch.h
│ ├── SDL_ttf.h
│ ├── SDL_types.h
│ ├── SDL_version.h
│ ├── SDL_video.h
│ └── SDL_vulkan.h
├── src
│ ├── atomic
│ ├── audio
│ ├── core
│ ├── cpuinfo
│ ├── dynapi
│ ├── events
│ ├── file
│ ├── filesystem
│ ├── gfx
│ ├── haptic
│ ├── hidapi
│ ├── image
│ ├── joystick
│ ├── libm
│ ├── loadso
│ ├── locale
│ ├── main
│ ├── power
│ ├── render
│ ├── SDL_assert.c
│ ├── SDL_assert_c.h
│ ├── SDL.c
│ ├── SDL_dataqueue.c
│ ├── SDL_dataqueue.h
│ ├── SDL_error.c
│ ├── SDL_error_c.h
│ ├── SDL_hints.c
│ ├── SDL_hints_c.h
│ ├── SDL_internal.h
│ ├── SDL_log.c
│ ├── sensor
│ ├── stdlib
│ ├── test
│ ├── thread
│ ├── timer
│ ├── ttf
│ └── video
├── test
具体可参考http://wiki.libsdl.org/ 了解SDL的具体内容
依赖组件
freetype
udisplay
常用配置
def_config: # 组件的可配置项
__ALIOS__: 1
LOAD_JPG: 1
LOAD_BMP: 1
LOAD_PNG: 1
__native_client__: 1
AOS_COMP_SDL2: 1
AOS_COMP_UDISPLAY: 1
默认打开支持jpg/bmp/png图像绘制,以及使用udisplay组件进行framebuffer显示
API说明
SDL2提供了丰富的API接口,支持audio/video/input等设备操作接口,请参考: https://wiki.libsdl.org/CategoryAPI
使用示例
组件使用示例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考《AliOS Things集成开发环境使用说明之搭建开发环境》,下载安装。 待开发环境搭建完成后,可以按照以下步骤进行示例的测试。
步骤1 创建或打开工程
打开已有工程
如果用于测试的案例工程已存在,可参考《AliOS Things集成开发环境使用说明之打开工程》打开已有工程。
创建新的工程
组件的示例代码可以通过编译链接到AliOS Things的任意案例(solution)来运行,这里选择helloworld_demo案例。helloworld_demo案例相关的源代码下载可参考《AliOS Things集成开发环境使用说明之创建工程》。
步骤2 添加组件
案例下载完成后,需要在helloworld_demo组件的package.yaml中添加对组件的依赖:
depends:
- SDL2: master # helloworld_demo组件中引入SDL2组件
- ili9341: master # helloworld_demo 中引入ili9341屏幕驱动
def_config:
CLI_IOBOX_ENABLE: 1 # 可选:使能文件系统测试命令,例如ls, ll, mkdir, touch, echo等
步骤3 下载组件
在已安装了的开发环境工具栏中,选择Terminal -> New Terminal启动终端,并且默认工作路径为当前工程的workspace,此时在终端命令行中输入:
aos install SDL2
上述命令执行成功后,组件源码则被下载到了./components/SDL2路径中。
步骤4 添加示例
请参考ugraphics组件的测试示例。
步骤5 编译固件
在示例代码已经添加至组件的配置文件,并且helloworld_demo已添加了对该组件的依赖后,就可以编译helloworld_demo案例来生成固件了,具体编译方法可参考《AliOS Things集成开发环境使用说明之编译固件》。
步骤6 烧录固件
上述步骤执行后,可参考《AliOS Things集成开发环境使用说明之烧录固件》来烧录固件。
步骤7 打开串口
固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考《AliOS Things集成开发环境使用说明之查看日志》。
当串口终端打开成功后,可在串口中输入help来查看已添加的测试命令。
步骤8 测试示例
在AliOS Things中ugraphics组件对SDL2中部分图像、字体相关接口进行了封装,请参考ugraphics组件的测试示例。