首页 > 代码库 > SDL2 中使用多线程绘图
SDL2 中使用多线程绘图
SDL的中文资料比较少,推荐一个英文的网站里面讲的非常详细 点击打开链接解决了我不少的疑惑。
最近在移植ucGUI到Android上,ucGUI的windows Demo中可以实现在一个线程中绘图,在另一个线程中刷新。在Android中使用ucGUI也是可以实现的用SDL 当画布,在子线程中绘画 ,在主线程中刷新。代码如下:
/*This source code copyrighted by Lazy Foo' Productions (2004-2013) and may not be redistributed without written permission.*/ //Using SDL and standard IO #include <SDL.h> #include <stdio.h> #include <stdbool.h> #include "GUI.h" //Screen dimension constants extern int SCREEN_WIDTH; extern int SCREEN_HEIGHT; //Starts up SDL and creates window //Loads media bool loadMedia();//加载图片 //Frees media and shuts down SDL void close(); //The window we'll be rendering to extern SDL_Window* g_screen_window; //The surface contained by the window extern SDL_Surface* g_screen_surface; //The image we will load and show on the screen SDL_Surface* gXOut = NULL; bool loadMedia() { //Loading success flag bool success = true; //Load splash image gXOut = SDL_LoadBMP("x.bmp"); if (gXOut == NULL) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to load image %s! SDL Error: %s\n", "03_event_driven_programming/x.bmp", SDL_GetError()); success = false; } return success; } void close() { //Deallocate surface SDL_FreeSurface(gXOut); gXOut = NULL; //Destroy window SDL_DestroyWindow(g_screen_window); g_screen_window = NULL; //Quit SDL subsystems SDL_Quit(); } void Thread1(void *pdata) { MainTask(0);//子线程中的绘画函数都在这里 SDL_Log("Thread runing"); } int SDL_main(int argc, char* args[]) { //Start up SDL and create window GUI_Init();//初始化windows 以及surface //Load media if (!loadMedia()) { printf("Failed to load media!\n"); } else { //Main loop flag bool quit = false; //Event handler SDL_Event e; SDL_Thread *thread = SDL_CreateThread(Thread1, "TestThread", (void *) NULL); //While application is running while (!quit) { //Handle events on queue while (SDL_PollEvent(&e) != 0) { //User requests quit if (e.type == SDL_QUIT) { quit = true; } if (e.type == SDL_FINGERUP) { quit = true; } } //Apply the image //Update the surface SDL_UpdateWindowSurface(g_screen_window); SDL_Log("Invalidate"); } } //Free resources and close SDL close(); return 0; }
SDL2 中使用多线程绘图
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。