文档

SDL2

更新时间:

更正文档

概述

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组件的测试示例。