Mercurial > hg > Members > kono > Cerium
diff Renderer/Engine/sgchangeSDL.cc @ 692:50750b118116
add sgchangeFB,SDL
author | hiroki@localhost.localdomain |
---|---|
date | Tue, 08 Dec 2009 16:52:04 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Renderer/Engine/sgchangeSDL.cc Tue Dec 08 16:52:04 2009 +0900 @@ -0,0 +1,60 @@ +#include "sgchangeSDL.h" +#include "Func.h" +#include "TaskManager.h" + +extern void post2runLoop(void *); + +extern + +void +SgChangeSDL::video_init(TaskManager *manager) +{ + Uint32 sdl_flag = default_sdl_flag | SDL_INIT_VIDEO; + Uint32 *p; + + if (SDL_Init(sdl_flag) < 0) { + fprintf(stderr,"Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + screen = SDL_SetVideoMode(width, height, bpp, SDL_SWSURFACE); + if (screen == NULL) { + fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError()); + SDL_Quit(); + exit(1); + } + + p = (Uint32*)manager->allocate(screen->pitch*height); + bitmap = SDL_CreateRGBSurfaceFrom((void *)p, + screen->w, screen->h, + screen->format->BitsPerPixel, + screen->pitch, + redMask, greenMask, blueMask, alphaMask); + + pixels = p; +} + +void +SgChangeSDL::clean_pixels() +{ + //bzero(pixels, sizeof(int)*width*height); + SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0,0,0)); +} + +void +SgChangeSDL::run_loop(HTaskPtr task_next) +{ + SDL_BlitSurface(bitmap, NULL, screen, NULL); + SDL_UpdateRect(screen, 0, 0, 0, 0); + + SgChange::run_loop(task_next); +} + +void +SgChangeSDL::run_finish() +{ + free(bitmap->pixels); + SDL_FreeSurface(bitmap); + + SgChange::run_finish(); +}