第六章:全红屏幕
前面我们已经熟悉了,如果将sdl自带的测试程序编译出目标测试程序在android手机上运行。本章,我们将创建一个自己的空的工程。并且调用SDL的接口,刷新屏幕为全红色。
申明:本文及后续内容,都是本人参考别人代码做的自我理解,如有解释错误,而误导读者,请见谅。
一。获取屏幕
开发windows程序时,SDL有这样的方式获取屏幕
SDL_Surface* pSDL_Surface = SDL_SetVideoMode(m_uiWidthPixel, m_uiHeightPixel, 32,SDL_SWSURFACE);
但是在android上没有使用成功。 也没再深究。于是采用拿来主义,从之前的那个例子中抠出了,获取屏幕的方法。
//定义一个全局的 g_state
static SDLTest_CommonState *g_state;
//首先需要下面两步初始化
int skypark_sdl_init(char **argv) {
g_state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
if (!g_state) {
return -1;
}
g_state->window_flags |= SDL_WINDOW_RESIZABLE;
if (!SDLTest_CommonInit(g_state)) {
return -2;
}
return 0;
}
然后在程序主循环中获取屏幕
SDL_Event event;
while (!done) {
//sleep(60);
//g_SkyparkLog.log("[%s][%d]run...", __FILE__, __LINE__);
while (SDL_PollEvent(&event)) {
SDLTest_CommonEvent(g_state, &event, &done);
}
for (int i = 0; i < g_state->num_windows; ++i) {
if (g_state->windows[i] == NULL)
continue;
//按照我的理解,g_state->renderers[i],就是屏幕了。
ShowScreen(g_state->renderers[i]);
}
}
二。绘制红色屏幕
void ShowScreen(SDL_Renderer * renderer) {
sleep(1);
static Uint64 i = 0;
i++;
if (i % 10 == 0) {
g_SkyparkLog.log("[%s][%d]run...", __FILE__, __LINE__);
}
//设置颜色
SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0xFF);
//以上面的颜色擦除
SDL_RenderClear(renderer);
//将缓存刷新到实际屏幕
SDL_RenderPresent(renderer);
}
三。编译运行:
好了,步骤虽然不多,但是其中遇到不少小问题。相信新手也会遇到各种莫名其妙的问题。所以,我上传一份打包好的代码到csdn上。有需要的朋友可以下载:
http://download.csdn.net/detail/ycg01/6784551