SDL2 在 Cxxdroid 里的配置 —— 移动端直接画图形
SDL2 是什么
Simple Directmedia Layer(SDL)是一个跨平台的底层多媒体开发库——提供:
- 2D 绘图(像素、矩形、圆、多边形)
- 图片加载(BMP、PNG、JPG 等)
- 音频播放(WAV、MP3)
- 输入处理(键盘、鼠标、触摸、手柄)
- 窗口管理
几乎所有独立游戏开发者都用 SDL2(或其高层封装如 Raylib)做图形渲染。
Cxxdroid 上能做什么
SDL2 在 Cxxdroid 预构建版本里:
- 能:创建窗口、渲染器、画图形、加载图片、响应触摸事件
- 不能(或有限制):完整的 OpenGL ES 加速、复杂的着色器、音频播放(部分版本不支持音频)
好消息是——SDL2 的渲染器在 Android 上会自动走 GPU 硬件加速,不需要你手动配置 EGL 或 GLES。
安装 SDL2
包管理器搜索「SDL2」或「sdl2」,安装即可。
CMake 自动发现
安装完 SDL2 后,CMake 项目里:
find_package(SDL2 REQUIRED)
add_executable(mygame main.cpp)
target_link_libraries(mygame PRIVATE SDL2::SDL2)
Cxxdroid 的预构建 SDL2 通常已经注册到系统,find_package 能直接找到。
如果报找不到 SDL2,可以手动指定路径:
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")加一个自定义 FindSDL2.cmake。
运行方向:竖屏还是横屏
Android 上的 SDL2 程序有个特殊设置——屏幕方向。
// 在创建窗口前设置
SDL_SetHint(SDL_HINT_ORIENTATIONS, "Portrait"); // 竖屏
SDL_SetHint(SDL_HINT_ORIENTATIONS, "Landscape"); // 横屏
SDL_SetHint(SDL_HINT_ORIENTATIONS, "All"); // 全部方向
在 Cxxdroid 上也可以在项目设置里配置默认运行方向。如果你做的是 2D 游戏,横屏通常更舒服——操作区域更大。

一个最小可运行的 SDL2 程序
#include <SDL2/SDL.h>
int main() {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *win = SDL_CreateWindow("Hello SDL2",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
320, 480, SDL_WINDOW_SHOWN);
SDL_Renderer *ren = SDL_CreateRenderer(win, -1,
SDL_RENDERER_ACCELERATED);
// 画个红色方块
SDL_SetRenderDrawColor(ren, 255, 0, 0, 255);
SDL_Rect rect = {50, 80, 100, 100};
SDL_RenderFillRect(ren, &rect);
SDL_RenderPresent(ren);
SDL_Delay(2000); // 等 2 秒让你看一眼
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
编译运行,如果屏幕上出现一个红色方块,说明 SDL2 工作正常。