Mercurial > hg > Members > kono > Cerium
annotate TaskManager/Test/test_render/task/CreateSpan.cpp @ 135:c65aee1528ef
remove xml file
author | gongo@charles.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Thu, 27 Nov 2008 16:19:50 +0900 |
parents | 92fcce4330f3 |
children | 6cf991f28c6c |
rev | line source |
---|---|
109 | 1 #include "CreateSpan.h" |
2 #include "viewer_types.h" | |
3 | |
4 static const int SPAN_PACK_LOAD = 5; | |
5 static const int SPAN_PACK_STORE = 6; | |
6 static const int POLYGON_PACK_LOAD = 7; | |
7 | |
8 static SpanPackPtr spack = NULL; | |
9 static SpanPackPtr send_spack = NULL; | |
10 static int prev_index = 0; | |
11 | |
12 SchedDefineTask(CreateSpan); | |
13 | |
14 static float | |
15 calc(float f1, float f2,int i, float base) | |
16 { | |
17 float ans; | |
18 ans = f1/f2*i + base; | |
19 return ans; | |
20 } | |
21 | |
22 | |
23 /** | |
24 * TrianglePack から、vMin, vMid, vMax を求める | |
25 * | |
26 * @param [triPack] TrianglePack | |
27 * @param [vMin] [vMid] [vMax] | |
28 */ | |
29 static void | |
30 make_vertex(TrianglePack *triPack, | |
31 VertexPackPtr *vMin, VertexPackPtr *vMid, VertexPackPtr *vMax) | |
32 { | |
33 if (triPack->ver1.y <= triPack->ver2.y) { | |
34 if (triPack->ver2.y <= triPack->ver3.y) { | |
35 *vMin = &triPack->ver1; | |
36 *vMid = &triPack->ver2; | |
37 *vMax = &triPack->ver3; | |
38 } else if (triPack->ver3.y <= triPack->ver1.y) { | |
39 *vMin = &triPack->ver3; | |
40 *vMid = &triPack->ver1; | |
41 *vMax = &triPack->ver2; | |
42 } else { | |
43 *vMin = &triPack->ver1; | |
44 *vMid = &triPack->ver3; | |
45 *vMax = &triPack->ver2; | |
46 } | |
47 } else { | |
48 if (triPack->ver1.y <= triPack->ver3.y) { | |
49 *vMin = &triPack->ver2; | |
50 *vMid = &triPack->ver1; | |
51 *vMax = &triPack->ver3; | |
52 } else if (triPack->ver3.y <= triPack->ver2.y) { | |
53 *vMin = &triPack->ver3; | |
54 *vMid = &triPack->ver2; | |
55 *vMax = &triPack->ver1; | |
56 } else { | |
57 *vMin = &triPack->ver2; | |
58 *vMid = &triPack->ver3; | |
59 *vMax = &triPack->ver1; | |
60 } | |
61 } | |
62 } | |
63 | |
64 static void | |
65 make_vMid10(VertexPack *v, VertexPack *vMin, | |
66 VertexPack *vMid, VertexPack *vMax) | |
67 { | |
68 int d, d1; | |
69 | |
70 d = (int)(vMax->y - vMin->y); | |
71 d1 = (int)(vMid->y - vMin->y); | |
72 | |
73 v->tex_x = calc(vMax->tex_x - vMin->tex_x, d, d1, vMin->tex_x); | |
74 v->tex_y = calc(vMax->tex_y - vMin->tex_y, d, d1, vMin->tex_y); | |
75 v->x = calc(vMax->x - vMin->x, d, d1, vMin->x); | |
76 v->y = vMid->y; | |
77 v->z = calc(vMax->z - vMin->z, d, d1, vMin->z); | |
78 } | |
79 | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
80 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
81 /** |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
82 * x軸に水平な辺を持つ三角形ポリゴンから、 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
83 * Span を抜き出す |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
84 */ |
109 | 85 void |
86 CreateSpan::half_triangle(SpanPackPtr *spackList, | |
87 int charge_y_top, int charge_y_end, | |
88 long *tex_addr, long tex_width, long tex_height, | |
89 VertexPack *vMin,VertexPack *vMid,VertexPack *vMid10) | |
90 { | |
91 float tmp_z,tmp_tex1, tmp_tex2 ,tmp_tey1,tmp_tey2; | |
92 float tmp_xpos,tmp_end,tmp_zpos; | |
93 float start_z, end_z; | |
94 float start_tex_x, end_tex_x, start_tex_y, end_tex_y; | |
95 int x, y, length; | |
96 | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
97 /** |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
98 * 三角形ポリゴンをx軸に水平に二つに分けようとして |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
99 * ある一辺がすでに水平だった場合、つまり |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
100 * (環境によっては、back slash が 円マークかも) |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
101 * |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
102 * |\ |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
103 * | \ |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
104 * | \ |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
105 * ----- |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
106 * |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
107 * |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
108 * 上のようなポリゴンだった場合は、本来なら上の部分の三角形にだけ |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
109 * half_triangle の処理をするべきだが、現在の処理だと |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
110 * この half_triangle に「上の部分の三角形」と、 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
111 * 「『下の部分の三角形と判断してしまった』直線」が来てしまう。 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
112 * 直線の部分が来ると、calc() で 0 除算とかで、値不定で暴走するので |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
113 * 現在はこれで代用。 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
114 * half_triangle 呼ぶ前にこれを判断できれば良いかもしれない。 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
115 * てかこんなんでいいのかよ。。。 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
116 * |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
117 */ |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
118 if (vMid10->x == vMin->x && vMid10->y == vMin->y) { |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
119 return; |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
120 } |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
121 |
135 | 122 #if 1 |
123 // これじゃないと | |
124 // テクスチャの貼りに微妙に隙間が。謎だ | |
109 | 125 int start_y = (int)vMid->y; |
126 int end_y = (int)vMin->y; | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
127 #else |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
128 float start_y = vMid->y; |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
129 float end_y = vMin->y; |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
130 #endif |
109 | 131 float div_y = start_y - end_y; |
132 int k = 0; | |
133 int l = 1; | |
134 | |
135 SpanPackPtr tmp_spack; | |
136 | |
137 if (div_y < 0) { | |
138 div_y = -div_y; | |
139 k = 1; | |
140 l = -1; | |
141 } | |
142 | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
143 for (int i = k; i < (int)div_y+1; i++) { |
109 | 144 y = (int)vMin->y + i*l; |
145 | |
146 /** | |
147 * 担当 y 範囲内 | |
148 */ | |
149 if (charge_y_top <= y && y <= charge_y_end) { | |
150 // 1..8 を index0, 9..16 を index1 にするために y を -1 | |
151 int index = (y-1) / split_screen_h; | |
152 | |
153 /** | |
154 * 違う SpanPack を扱う場合、 | |
155 * 現在の SpanPack をメインメモリに送り、 | |
156 * 新しい SpanPack を取ってくる | |
157 */ | |
158 if (index != prev_index) { | |
159 tmp_spack = spack; | |
160 spack = send_spack; | |
161 send_spack = tmp_spack; | |
162 | |
163 smanager->dma_wait(SPAN_PACK_STORE); | |
164 smanager->dma_store(send_spack, (uint32)spackList[prev_index], | |
165 sizeof(SpanPack), SPAN_PACK_STORE); | |
166 | |
167 smanager->dma_load(spack, (uint32)spackList[index], | |
168 sizeof(SpanPack), SPAN_PACK_LOAD); | |
169 prev_index = index; | |
170 smanager->dma_wait(SPAN_PACK_LOAD); | |
171 } | |
172 | |
173 /** | |
174 * 書き込む SpanPack が満杯だったら | |
175 * メインメモリで allocate した領域 (next) を持ってきて | |
176 * 現在の spack->next につなぎ、next を次の spack とする。 | |
177 */ | |
178 if (spack->info.size >= MAX_SIZE_SPAN) { | |
179 SpanPackPtr next; | |
180 | |
181 mainMem_alloc(0, sizeof(SpanPack)); | |
182 mainMem_wait(); | |
183 next = (SpanPackPtr)mainMem_get(0); | |
184 | |
185 spack->next = next; | |
186 | |
187 tmp_spack = spack; | |
188 spack = send_spack; | |
189 send_spack = tmp_spack; | |
190 | |
191 smanager->dma_wait(SPAN_PACK_STORE); | |
192 smanager->dma_store(send_spack, (uint32)spackList[index], | |
193 sizeof(SpanPack), SPAN_PACK_STORE); | |
194 | |
195 spackList[index] = next; | |
196 | |
197 smanager->dma_load(spack, (uint32)spackList[index], | |
198 sizeof(SpanPack), SPAN_PACK_LOAD); | |
199 smanager->dma_wait(SPAN_PACK_LOAD); | |
200 spack->init((index+1)*split_screen_h); | |
201 } | |
202 } else { | |
203 /** | |
204 * 担当範囲外だったら無視 | |
205 */ | |
206 continue; | |
207 } | |
208 | |
209 tmp_xpos = calc(vMid10->x - vMin->x ,div_y, i, vMin->x); | |
210 tmp_end = calc(vMid->x - vMin->x ,div_y, i, vMin->x); | |
211 tmp_z = calc(vMid10->z - vMin->z ,div_y, i, vMin->z); | |
212 tmp_zpos = calc(vMid->z - vMin->z ,div_y, i, vMin->z); | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
213 |
109 | 214 tmp_tex1 =((i/(div_y)) * vMid10->tex_x) + |
215 ( ((div_y - i)/(div_y)) * vMin->tex_x); | |
216 tmp_tex2 =( (i/(div_y)) * vMid->tex_x) + | |
217 ( ((div_y - i)/(div_y)) * vMin->tex_x); | |
218 | |
219 tmp_tey1 =( (i/(div_y)) * vMid10->tex_y) + | |
220 ( ((div_y - i)/(div_y)) * vMin->tex_y); | |
221 tmp_tey2 =( (i/(div_y)) * vMid->tex_y) + | |
222 ( ((div_y - i)/(div_y)) * vMin->tex_y); | |
223 | |
224 if (tmp_xpos > tmp_end) { | |
225 x = (int)tmp_end; | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
226 /** |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
227 * +1 は要らない気がする・・・ |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
228 */ |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
229 //length = (int)(tmp_xpos)-(int)(tmp_end)+1; |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
230 length = (int)(tmp_xpos)-(int)(tmp_end); |
109 | 231 start_z = tmp_zpos; |
232 end_z = tmp_z; | |
233 start_tex_x = tmp_tex2; | |
234 end_tex_x = tmp_tex1; | |
235 start_tex_y = tmp_tey2; | |
236 end_tex_y = tmp_tey1; | |
237 } else { | |
238 x = (int)tmp_xpos; | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
239 //length = (int)(tmp_end)-(int)(tmp_xpos)+1; |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
240 length = (int)(tmp_end)-(int)(tmp_xpos); |
109 | 241 start_z = tmp_z; |
242 end_z = tmp_zpos; | |
243 start_tex_x = tmp_tex1; | |
244 end_tex_x = tmp_tex2; | |
245 start_tex_y = tmp_tey1; | |
246 end_tex_y = tmp_tey2; | |
247 } | |
248 | |
249 smanager->dma_wait(SPAN_PACK_LOAD); | |
250 | |
251 Span *span = &spack->span[spack->info.size++]; | |
252 | |
253 span->tex_addr = tex_addr; | |
254 span->tex_width = tex_width; | |
255 span->tex_height = tex_height; | |
256 span->x = x; | |
257 span->y = y; | |
258 span->length_x = length; | |
259 span->start_z = start_z; | |
260 span->end_z = end_z; | |
261 span->tex_x1 = start_tex_x; | |
262 span->tex_x2 = end_tex_x; | |
263 span->tex_y1 = start_tex_y; | |
264 span->tex_y2 = end_tex_y; | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
265 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
266 // TilePtr の計算 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
267 // tix, tiy (Tile 内での x, y) |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
268 // |
109 | 269 } |
270 } | |
271 | |
272 | |
273 int | |
274 CreateSpan::run(void *rbuf, void *wbuf) | |
275 { | |
276 PolygonPack *pp = (PolygonPack*)smanager->get_input(0); | |
277 PolygonPack *next_pp = | |
278 (PolygonPack*)smanager->allocate(sizeof(PolygonPack)); | |
279 PolygonPack *free_pp = next_pp; | |
280 PolygonPack *tmp_pp; | |
281 | |
282 TrianglePackPtr triPack; | |
283 VertexPackPtr vMin, vMid, vMax; | |
284 VertexPackPtr vMid10 | |
285 = (VertexPackPtr)smanager->allocate(sizeof(VertexPack)); | |
286 | |
287 SpanPackPtr *spackList = (SpanPackPtr*)smanager->get_input(1); | |
288 spack = (SpanPackPtr)smanager->get_input(2); | |
289 send_spack = (SpanPackPtr)smanager->allocate(sizeof(SpanPack)); | |
290 prev_index = get_param(0); | |
291 | |
292 // spack と send_spack は swap しながら DMA を繰り返すので | |
293 // 自分で allocate した send_spack を覚えてないといけない | |
294 SpanPackPtr free_spack = send_spack; | |
295 | |
296 int charge_y_top = get_param(1); | |
297 int charge_y_end = get_param(2); | |
298 | |
299 do { | |
300 if (pp->next != NULL) { | |
301 smanager->dma_load(next_pp, (uint32)pp->next, | |
302 sizeof(PolygonPack), POLYGON_PACK_LOAD); | |
303 } else { | |
304 next_pp = NULL; | |
305 } | |
306 | |
307 for (int i = 0; i < pp->info.size; i++) { | |
308 triPack = &pp->tri[i]; | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
309 |
109 | 310 #if 0 |
311 make_vertex(triPack, &vMin, &vMid, &vMax); | |
312 #else | |
313 if (triPack->ver1.y <= triPack->ver2.y) { | |
314 if (triPack->ver2.y <= triPack->ver3.y) { | |
315 vMin = &triPack->ver1; | |
316 vMid = &triPack->ver2; | |
317 vMax = &triPack->ver3; | |
318 } else if (triPack->ver3.y <= triPack->ver1.y) { | |
319 vMin = &triPack->ver3; | |
320 vMid = &triPack->ver1; | |
321 vMax = &triPack->ver2; | |
322 } else { | |
323 vMin = &triPack->ver1; | |
324 vMid = &triPack->ver3; | |
325 vMax = &triPack->ver2; | |
326 } | |
327 } else { | |
328 if (triPack->ver1.y <= triPack->ver3.y) { | |
329 vMin = &triPack->ver2; | |
330 vMid = &triPack->ver1; | |
331 vMax = &triPack->ver3; | |
332 } else if (triPack->ver3.y <= triPack->ver2.y) { | |
333 vMin = &triPack->ver3; | |
334 vMid = &triPack->ver2; | |
335 vMax = &triPack->ver1; | |
336 } else { | |
337 vMin = &triPack->ver2; | |
338 vMid = &triPack->ver3; | |
339 vMax = &triPack->ver1; | |
340 } | |
341 } | |
342 #endif | |
343 make_vMid10(vMid10, vMin, vMid, vMax); | |
134
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
344 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
345 /** |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
346 * ポリゴンを、x軸に水平に分割して二つの三角形を作り、 |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
347 * それぞれから Span を求める |
92fcce4330f3
CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
109
diff
changeset
|
348 */ |
109 | 349 half_triangle(spackList, charge_y_top, charge_y_end, |
350 triPack->tex_addr, triPack->tex_width, | |
351 triPack->tex_height, vMin, vMid, vMid10); | |
352 half_triangle(spackList, charge_y_top, charge_y_end, | |
353 pp->tri[0].tex_addr, pp->tri[0].tex_width, | |
354 pp->tri[0].tex_height, vMax, vMid, vMid10); | |
355 } | |
356 | |
357 smanager->dma_wait(POLYGON_PACK_LOAD); | |
358 | |
359 tmp_pp = pp; | |
360 pp = next_pp; | |
361 next_pp = tmp_pp; | |
362 } while (pp); | |
363 | |
364 smanager->dma_wait(SPAN_PACK_STORE); | |
365 smanager->dma_store(spack, (uint32)spackList[prev_index], | |
366 sizeof(SpanPack), SPAN_PACK_STORE); | |
367 smanager->dma_wait(SPAN_PACK_STORE); | |
368 | |
369 free(free_pp); | |
370 free(free_spack); | |
371 free(vMid10); | |
372 | |
373 return 0; | |
374 } |