# HG changeset patch # User yutaka@localhost.localdomain # Date 1279725817 -32400 # Node ID 05696567d1d277aa20e0011781821ffa7a9d4f0e # Parent b2ca394bbd5005d858e5bdb077aca472dca86cf3 0 is filled on the spe side. diff -r b2ca394bbd50 -r 05696567d1d2 Renderer/Engine/main.cc --- a/Renderer/Engine/main.cc Tue Jul 20 17:31:05 2010 +0900 +++ b/Renderer/Engine/main.cc Thu Jul 22 00:23:37 2010 +0900 @@ -31,6 +31,8 @@ int spenum = 1; video_type vtype = VTYPE_SDL; + int mem_flag = 0; + for(int i = 1; argv[i]; ++i) { if (strcmp(argv[i], "-bpp") == 0) { @@ -53,6 +55,9 @@ } i++; } + if (strcmp(argv[i], "-mem") == 0) { + mem_flag = 1; + } } Viewer *screen; @@ -67,6 +72,7 @@ screen = new Viewer(manager, dev, bpp, width, height, spenum); } + screen->mem_flag = mem_flag; screen->run_init(manager, application()); return 0; diff -r b2ca394bbd50 -r 05696567d1d2 Renderer/Engine/spe/DrawSpan.cc --- a/Renderer/Engine/spe/DrawSpan.cc Tue Jul 20 17:31:05 2010 +0900 +++ b/Renderer/Engine/spe/DrawSpan.cc Thu Jul 22 00:23:37 2010 +0900 @@ -503,7 +503,12 @@ int rangex = rangex_end - rangex_start + 1; int rangey = (long)smanager->get_param(4); - linebuf_init(smanager, rangex, rangey, 0); + for(int h = 0; h < rangey; h++) { + int *buf = (int*)smanager->get_output(h); + for (int i = 0; i < rangex; i++) { + buf[i] = 0; + } + } return 0; diff -r b2ca394bbd50 -r 05696567d1d2 Renderer/Engine/task/DrawSpan.cc --- a/Renderer/Engine/task/DrawSpan.cc Tue Jul 20 17:31:05 2010 +0900 +++ b/Renderer/Engine/task/DrawSpan.cc Thu Jul 22 00:23:37 2010 +0900 @@ -484,7 +484,12 @@ int rangex = rangex_end - rangex_start + 1; int rangey = (long)smanager->get_param(4); - linebuf_init(smanager, rangex, rangey, 0); + for(int h = 0; h < rangey; h++) { + int *buf = (int*)smanager->get_output(h); + for (int i = 0; i < rangex; i++) { + buf[i] = 0; + } + } return 0; diff -r b2ca394bbd50 -r 05696567d1d2 Renderer/Engine/viewer.cc --- a/Renderer/Engine/viewer.cc Tue Jul 20 17:31:05 2010 +0900 +++ b/Renderer/Engine/viewer.cc Thu Jul 22 00:23:37 2010 +0900 @@ -754,6 +754,7 @@ } ppack->clear(); + for (int i = 0; i < spackList_length; i++) { SpanPack *spack = &spackList[i]; int startx = 1; @@ -766,7 +767,8 @@ #if 1 - if(spack->info.size > 0) { + // mem_flag は spe 側で黒い部分を 0 で埋めるフラグ + if(spack->info.size > 0 || mem_flag == 1) { int array_task_num = (this->width + split_screen_w - 1) / split_screen_w; HTaskPtr task_draw_array = manager->create_task_array(DrawSpan, array_task_num, 6, 1, rangey); @@ -807,12 +809,15 @@ task_draw_array->wait_for(data_update_wait); task_draw_array->spawn(); - } else { + + } else { + memset(&pixels[(startx-1)+this->width*(starty-1)], 0, (this->width)*sizeof(int)*rangey); - } + } + #else diff -r b2ca394bbd50 -r 05696567d1d2 Renderer/Engine/viewer.h --- a/Renderer/Engine/viewer.h Tue Jul 20 17:31:05 2010 +0900 +++ b/Renderer/Engine/viewer.h Thu Jul 22 00:23:37 2010 +0900 @@ -50,6 +50,8 @@ Uint32 video_flags; Uint32 *pixels; + int mem_flag; + SceneGraphRoot *sgroot; //Uint32 *video_init(TaskManager *manager, int bpp, int width, int height);