comparison TaskManager/Test/test_render/task/DrawSpanRenew.cpp @ 298:58fd16298954

from EUC to UTF-8
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 07 Jun 2009 15:17:41 +0900
parents e1d24c951408
children 7efc5ede2c03
comparison
equal deleted inserted replaced
297:f8006660a45c 298:58fd16298954
23 SpanPackPtr curr = (SpanPackPtr)smanager->allocate(sizeof(SpanPack)); 23 SpanPackPtr curr = (SpanPackPtr)smanager->allocate(sizeof(SpanPack));
24 memcpy(curr, spack, sizeof(SpanPack)); 24 memcpy(curr, spack, sizeof(SpanPack));
25 renew_task->add_param((int)curr); 25 renew_task->add_param((int)curr);
26 renew_task->add_param(cur_span_x); 26 renew_task->add_param(cur_span_x);
27 27
28 // linebuf と zRow も引き継がせる 28 // linebuf zRow 綣膓
29 renew_task->add_param((int)linebuf); 29 renew_task->add_param((int)linebuf);
30 renew_task->add_param((int)zRow); 30 renew_task->add_param((int)zRow);
31 31
32 //fprintf(stderr, "[%p] start %u\n", curr, spu_readch(SPU_RdDec)); 32 //fprintf(stderr, "[%p] start %u\n", curr, spu_readch(SPU_RdDec));
33 33
34 /** 34 /**
35 * 再起動したタスクを待つ 35 * 莎桁帥鴻緇
36 */ 36 */
37 smanager->wait_task(renew_task); 37 smanager->wait_task(renew_task);
38 38
39 // next_spack は free() するので wait する 39 // next_spack free() wait
40 smanager->dma_wait(SPAN_PACK_LOAD); 40 smanager->dma_wait(SPAN_PACK_LOAD);
41 } 41 }
42 42
43 int 43 int
44 DrawSpanRenew::run(void *rbuf, void *wbuf) 44 DrawSpanRenew::run(void *rbuf, void *wbuf)
53 uint32 display = args->display; 53 uint32 display = args->display;
54 int screen_width = args->screen_width; 54 int screen_width = args->screen_width;
55 int rangex_start = args->rangex_start; 55 int rangex_start = args->rangex_start;
56 int rangex_end = args->rangex_end; 56 int rangex_end = args->rangex_end;
57 57
58 // このタスクが担当する x の範囲 58 // 帥鴻綵 x 膀
59 int rangex = rangex_end - rangex_start + 1; 59 int rangex = rangex_end - rangex_start + 1;
60 60
61 // y の範囲 (render_y + rangey - 1) 61 // y 膀 (render_y + rangey - 1)
62 int rangey = args->rangey; 62 int rangey = args->rangey;
63 63
64 hash = (TileHashPtr)smanager->global_get(GLOBAL_TEXTURE_HASH); 64 hash = (TileHashPtr)smanager->global_get(GLOBAL_TEXTURE_HASH);
65 tileList = (TileListPtr)smanager->global_get(GLOBAL_TILE_LIST); 65 tileList = (TileListPtr)smanager->global_get(GLOBAL_TILE_LIST);
66 66
67 linebuf = (int*)smanager->get_param(3); 67 linebuf = (int*)smanager->get_param(3);
68 zRow = (float*)smanager->get_param(4); 68 zRow = (float*)smanager->get_param(4);
69 69
70 doneWrite = 0; 70 doneWrite = 0;
71 71
72 // span->length_x の処理での再起動位置 72 // span->length_x с莎桁篏臀
73 int js_cont = smanager->get_param(2); 73 int js_cont = smanager->get_param(2);
74 74
75 //fprintf(stderr, "[%p] end %u\n", spack, spu_readch(SPU_RdDec)); 75 //fprintf(stderr, "[%p] end %u\n", spack, spu_readch(SPU_RdDec));
76 76
77 smanager->dma_wait(TEX_LOAD); 77 smanager->dma_wait(TEX_LOAD);
78 78
79 do { 79 do {
80 /** 80 /**
81 * SpanPack->next が存在する場合、 81 * SpanPack->next 絖翫
82 * 現在の SpanPack を処理してる間に 82 * 憜 SpanPack
83 * 次の SpanPack の DMA 転送を行う 83 * 罨< SpanPack DMA 荵∫茵
84 */ 84 */
85 if (spack->next != NULL) { 85 if (spack->next != NULL) {
86 smanager->dma_load(next_spack, (uint32)spack->next, 86 smanager->dma_load(next_spack, (uint32)spack->next,
87 sizeof(SpanPack), SPAN_PACK_LOAD); 87 sizeof(SpanPack), SPAN_PACK_LOAD);
88 } else { 88 } else {
97 float tex2 = span->tex_x2; 97 float tex2 = span->tex_x2;
98 float tey1 = span->tex_y1; 98 float tey1 = span->tex_y1;
99 float tey2 = span->tex_y2; 99 float tey2 = span->tex_y2;
100 100
101 /** 101 /**
102 * Span が持つ 1 pixel 毎の 102 * Span 1 pixel 罸
103 * テクスチャの座標 103 * 鴻c綺ф
104 */ 104 */
105 int tex_xpos; 105 int tex_xpos;
106 int tex_ypos; 106 int tex_ypos;
107 107
108 /** 108 /**
109 * (tex_xpos, tex_ypos) の、ブロック内(上の図参照)での座標と 109 * (tex_xpos, tex_ypos) (筝喝)с綺ф
110 * そのブロックのアドレス(MainMemory) 110 * ≪(MainMemory)
111 */ 111 */
112 int tex_localx; 112 int tex_localx;
113 int tex_localy; 113 int tex_localy;
114 uint32 *tex_addr; 114 uint32 *tex_addr;
115 115
117 int y = span->y; 117 int y = span->y;
118 int x_len = span->length_x; 118 int x_len = span->length_x;
119 float z = span->start_z; 119 float z = span->start_z;
120 float zpos = span->end_z; 120 float zpos = span->end_z;
121 121
122 // 座標が [0 .. split_screen_w-1] に入るように x,y を -1 122 // 綺ф [0 .. split_screen_w-1] ャ x,y -1
123 int localx = getLocalX(x-1); 123 int localx = getLocalX(x-1);
124 int localy = getLocalY(y-1); 124 int localy = getLocalY(y-1);
125 125
126 if (x_len == 1) { 126 if (x_len == 1) {
127 if (x < rangex_start || rangex_end < x) { 127 if (x < rangex_start || rangex_end < x) {
151 int js = (x < rangex_start) ? rangex_start - x : 0; 151 int js = (x < rangex_start) ? rangex_start - x : 0;
152 int je = (x + x_len > rangex_end) ? rangex_end - x : x_len; 152 int je = (x + x_len > rangex_end) ? rangex_end - x : x_len;
153 float tex_x, tex_y, tex_z; 153 float tex_x, tex_y, tex_z;
154 154
155 /** 155 /**
156 * 一回比較すれば、以後再起動するまでは 156 * 筝罸莠違篁ュ莎桁障с
157 * js_cont は使わないから 0 にしてるわけだけど、 157 * js_cont 篏帥 0
158 * 最初の一回のためだけにこれはめんどくさいのー。 158 * 筝若
159 */ 159 */
160 js = (js < js_cont) ? js_cont : js; 160 js = (js < js_cont) ? js_cont : js;
161 js_cont = 0; 161 js_cont = 0;
162 162
163 for (int j = js; j <= je; j++) { 163 for (int j = js; j <= je; j++) {
215 free(zRow); 215 free(zRow);
216 free(args); 216 free(args);
217 217
218 //FINISH: 218 //FINISH:
219 /** 219 /**
220 * linebuf, zRow, args は RenewTask が引き継ぐ 220 * linebuf, zRow, args RenewTask 綣膓
221 */ 221 */
222 free(free_spack1); 222 free(free_spack1);
223 free(free_spack2); 223 free(free_spack2);
224 224
225 return 0; 225 return 0;