概述
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組件的測試示例。