# HG changeset patch # User yutaka@charles.cr.ie.u-ryukyu.ac.jp # Date 1286774462 -32400 # Node ID 33616b2789def301f8ff1a62233c752dda1468fc # Parent 8024a3a4483274876f13b89396548fce05925a34 SDL mode fix diff -r 8024a3a44832 -r 33616b2789de Renderer/Engine/SceneGraph.cc --- a/Renderer/Engine/SceneGraph.cc Sat Oct 09 19:11:45 2010 +0900 +++ b/Renderer/Engine/SceneGraph.cc Mon Oct 11 14:21:02 2010 +0900 @@ -453,12 +453,12 @@ SDL_Surface *texture_image = IMG_Load(image_name); if (!texture_image) return 0; SDL_Surface *tmpImage - = SDL_CreateRGBSurface(SDL_HWSURFACE, texture_image->w, + = SDL_CreateRGBSurface(SDL_SWSURFACE, texture_image->w, texture_image->h, 32, redMask, greenMask, blueMask, alphaMask); SDL_Surface *converted; converted = SDL_ConvertSurface(texture_image, tmpImage->format, - SDL_HWSURFACE); + SDL_SWSURFACE); if (converted != NULL) { SDL_FreeSurface(texture_image); texture_image = converted; diff -r 8024a3a44832 -r 33616b2789de Renderer/Engine/spe/DrawSpan.cc --- a/Renderer/Engine/spe/DrawSpan.cc Sat Oct 09 19:11:45 2010 +0900 +++ b/Renderer/Engine/spe/DrawSpan.cc Mon Oct 11 14:21:02 2010 +0900 @@ -216,14 +216,15 @@ int world_x, int world_y, float world_z, SchedTask *smanager) { - int color = get_rgb(tex_x, tex_y, tile); + uint32 color = get_rgb(tex_x, tex_y, tile); /*下位4bitを抽出*/ #if LITTLEENDIAN int alpha = color & 0x000000ff; #else int alpha = color & 0xff000000; #endif - /*完全に透けているか判断*/ + + //完全に透けているか判断 int flag = (alpha != 0 && normal_z < 0); int *light_sysswitch = (int*)smanager->global_get(LightSysSwitch); //smanager->printf("sys %d\n",light_sysswitch); @@ -235,11 +236,9 @@ } g->zRow[localx + (rangex*localy)] = zpos*flag + g->zRow[localx + (rangex*localy)]*(1-flag); - int *point = &g->linebuf[localy][localx] ; + int *point = &g->linebuf[localy][localx]; *point = color*flag + *point *(1-flag); - - } /** @@ -514,7 +513,6 @@ } - G g0; Gptr g = &g0; @@ -566,13 +564,13 @@ span = &spack->span[t]; if (span->length_x != 1) { - drawLine1( - smanager, g, + drawLine1( + smanager, g, span, rangex_start, rangex_end, tl_tag[tl_tag_flg1]); } else { - drawDot1( - smanager, g, - span, rangex_start, rangex_end, tl_tag[tl_tag_flg1]); + drawDot1( + smanager, g, + span, rangex_start, rangex_end, tl_tag[tl_tag_flg1]); } next_span = span; diff -r 8024a3a44832 -r 33616b2789de Renderer/Engine/viewer.cc --- a/Renderer/Engine/viewer.cc Sat Oct 09 19:11:45 2010 +0900 +++ b/Renderer/Engine/viewer.cc Mon Oct 11 14:21:02 2010 +0900 @@ -34,7 +34,7 @@ RederingData r[2]; -int ppi, spi; +int ppi, spi = 0; /** * @@ -293,7 +293,7 @@ { HTaskPtr task_next = initLoop(); - task_next->set_post(&post2runLoop, (void *)this, 0); // set_post(function(this->run_loop()), NULL) + task_next->set_post(&post2runLoop, (void *)this, (void*)pixels); // set_post(function(this->run_loop()), NULL) task_next->spawn(); } @@ -311,6 +311,7 @@ } dev->clean_pixels(); + pixels = dev->flip_screen(pixels); /* ここでGameTaskの終了を待つTaskを生成しておく */ @@ -357,6 +358,8 @@ static void post2runLoop(SchedTask *s, void *viewer_, void *arg) { + + Viewer *viewer = (Viewer*)viewer_; HTaskPtr task_next = viewer->manager->create_task(Dummy,0,0,0,0); viewer->run_loop(task_next); @@ -377,7 +380,7 @@ { common_draw(task_next); - task_next->set_post(post2runLoop, (void*)this, 0); // set_post(function(this->run_loop()), NULL) + task_next->set_post(post2runLoop, (void*)this, (void*)pixels); // set_post(function(this->run_loop()), NULL) task_next->spawn(); // TASK_DRAW_SPAN が全て終わったら DUMMY_TASK が Viewer::run_loop() を呼ぶ diff -r 8024a3a44832 -r 33616b2789de Renderer/Engine/viewerSDL.cc --- a/Renderer/Engine/viewerSDL.cc Sat Oct 09 19:11:45 2010 +0900 +++ b/Renderer/Engine/viewerSDL.cc Mon Oct 11 14:21:02 2010 +0900 @@ -19,14 +19,14 @@ Uint32 * ViewerSDL::video_init(TaskManager *manager, int bpp, int width, int height) { - + int fd_framebuffer ; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; int xres,yres,vbpp; - /* 読み書き用にファイルを開く */ + // 読み書き用にファイルを開く fd_framebuffer = open( DEVICE_NAME , O_RDWR); if ( !fd_framebuffer ) { send_current_error_msg("Framebuffer device open error !"); @@ -34,13 +34,13 @@ } send_current_information("The framebuffer device was opened !"); - /* 固定スクリーン情報取得 */ + // 固定スクリーン情報取得 if ( ioctl( fd_framebuffer , FBIOGET_FSCREENINFO , &finfo ) ) { send_current_error_msg("Fixed information not gotton !"); exit(2); } - /* 変動スクリーン情報取得 */ + // 変動スクリーン情報取得 if ( ioctl( fd_framebuffer , FBIOGET_VSCREENINFO , &vinfo ) ) { send_current_error_msg("Variable information not gotton !"); exit(3); @@ -55,6 +55,7 @@ width = xres; height = yres; bpp = vbpp; + Uint32 sdl_flag = default_sdl_flag | SDL_INIT_VIDEO; Uint32 *p; @@ -64,9 +65,9 @@ exit(1); } - screen = SDL_SetVideoMode(width, height, bpp, SDL_HWSURFACE); + screen = SDL_SetVideoMode(width, height, bpp, SDL_SWSURFACE); if (screen == NULL) { - fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError()); + fprintf(stderr, "Couldn't set SDL mode: %s\n", SDL_GetError()); SDL_Quit(); exit(1); } @@ -75,11 +76,6 @@ this->bpp = screen->format->BitsPerPixel; 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); return p; } @@ -88,25 +84,37 @@ ViewerSDL::clean_pixels() { //bzero(pixels, sizeof(int)*width*height); - SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0,0,0)); + //SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0,0,0)); } void ViewerSDL::clear_screen() { + #if !UGA SDL_BlitSurface(bitmap, NULL, screen, NULL); SDL_UpdateRect(screen, 0, 0, 0, 0); #endif + } uint32_t * ViewerSDL::flip_screen(uint32_t *old) { #if UGA + + bitmap = SDL_CreateRGBSurfaceFrom((void *)old, + screen->w, screen->h, + screen->format->BitsPerPixel, + screen->pitch, + //redMask, greenMask, blueMask, alphaMask); + redMask, greenMask, blueMask, 0); + SDL_BlitSurface(bitmap,NULL,screen,NULL); SDL_UpdateRect(screen,0,0,0,0); + #endif + return old; }