annotate TaskManager/Test/test_render/spe/CreateSpan.cc @ 467:44c0bce54dcf

fix all examples. test_render is not working now.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 01 Oct 2009 19:25:25 +0900
parents afb717c43a3c
children 699ee087234e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
322
4be5ae77e02c remove debug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
1 // #define DEBUG
321
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
2 #include "error.h"
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
3 #include "CreateSpan.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
4 #include "viewer_types.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
5
244
59c3b9df3c67 mail modify
e065746@localhost.localdomain
parents: 233
diff changeset
6 // DMA channel
164
38cbb7aecc70 TilePtr は SPE で計算した方がいいと判断して変更。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 161
diff changeset
7 static const int SPAN_PACK_LOAD = 5;
38cbb7aecc70 TilePtr は SPE で計算した方がいいと判断して変更。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 161
diff changeset
8 static const int SPAN_PACK_STORE = 6;
38cbb7aecc70 TilePtr は SPE で計算した方がいいと判断して変更。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 161
diff changeset
9 static const int POLYGON_PACK_LOAD = 7;
38cbb7aecc70 TilePtr は SPE で計算した方がいいと判断して変更。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 161
diff changeset
10 static const int TILE_ALLOCATE = 8;
38cbb7aecc70 TilePtr は SPE で計算した方がいいと判断して変更。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 161
diff changeset
11 static const int TILE_LOAD = 9;
38cbb7aecc70 TilePtr は SPE で計算した方がいいと判断して変更。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 161
diff changeset
12 static const int TILE_STORE = 10;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
13
467
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
14 static struct g {
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
15 SpanPackPtr spack ;
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
16 SpanPackPtr send_spack ;
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
17 int prev_index = ;
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
18 } G, *Gptr;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
19
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
20 SchedDefineTask(CreateSpan);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
21
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
22 static float
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
23 calc(float f1, float f2,int i, float base)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
24 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
25 float ans;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
26 ans = f1/f2*i + base;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
27 return ans;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
28 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
29
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
30
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
31 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
32 * TrianglePack から、vMin, vMid, vMax を求める
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
33 *
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
34 * @param [triPack] TrianglePack
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
35 * @param [vMin] [vMid] [vMax]
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
36 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
37 static void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
38 make_vertex(TrianglePack *triPack,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
39 VertexPackPtr *vMin, VertexPackPtr *vMid, VertexPackPtr *vMax)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
40 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
41 if (triPack->ver1.y <= triPack->ver2.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
42 if (triPack->ver2.y <= triPack->ver3.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
43 *vMin = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
44 *vMid = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
45 *vMax = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
46 } else if (triPack->ver3.y <= triPack->ver1.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
47 *vMin = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
48 *vMid = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
49 *vMax = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
50 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
51 *vMin = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
52 *vMid = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
53 *vMax = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
54 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
55 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
56 if (triPack->ver1.y <= triPack->ver3.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
57 *vMin = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
58 *vMid = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
59 *vMax = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
60 } else if (triPack->ver3.y <= triPack->ver2.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
61 *vMin = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
62 *vMid = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
63 *vMax = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
64 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
65 *vMin = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
66 *vMid = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
67 *vMax = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
68 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
69 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
70 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
71
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
72 static void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
73 make_vMid10(VertexPack *v, VertexPack *vMin,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
74 VertexPack *vMid, VertexPack *vMax)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
75 {
146
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
76 //int d, d1;
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
77 float d;
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
78 int d1;
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
79
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
80 d = vMax->y - vMin->y;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
81 d1 = (int)(vMid->y - vMin->y);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
82
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
83 v->tex_x = calc(vMax->tex_x - vMin->tex_x, d, d1, vMin->tex_x);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
84 v->tex_y = calc(vMax->tex_y - vMin->tex_y, d, d1, vMin->tex_y);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
85 v->x = calc(vMax->x - vMin->x, d, d1, vMin->x);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
86 v->y = vMid->y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
87 v->z = calc(vMax->z - vMin->z, d, d1, vMin->z);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
88 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
89
156
gongo@gendarme.local
parents: 155
diff changeset
90 /**
174
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
91 * 与えられた scale から、実際に使うテクスチャの Tapestry を選択する
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
92 *
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
93 * テクスチャは、オリジナルのサイズから、可能なかぎり 1/2 で縮小していき、
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
94 * 下の図の様に連続した領域に入れられる
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
95 *
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
96 * Tapestry (1)
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
97 * +---+---+---+---+
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
98 * | 0 | 1 | 2 | 3 |
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
99 * +---+---+---+---+
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
100 * | 4 | 5 | 6 | 7 | (2)
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
101 * +---+---+---+---+ +---+---+
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
102 * | 8 | 9 | 10| 11| | 16| 17| (3)
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
103 * +---+---+---+---+ +---+---+ +---+
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
104 * | 12| 13| 14| 15| | 18| 19| | 20|
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
105 * +---+---+---+---+ +---+---+ +---|
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
106 *
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
107 * (1) (2) (3)
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
108 * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
109 * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * | * | * | 14| 15| 16| 17| 18| 19| 20|
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
110 * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
111 *
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
112 * scale の値から、各 Tapestry の先頭アドレスを返す
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
113 *
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
114 * @param[in] tw Width of texture
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
115 * @param[in] th Height of texture
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
116 * @param[in] scale テクスチャの縮小率 (= 2^n)
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
117 * @param[in] addr_top テクスチャの先頭アドレス (上の図での (1)
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
118 * @return scale に対応する Tapestry のアドレス (上の図での (1) or (2) or(3)
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
119 */
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
120 static uint32*
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
121 getTapestry(int tw, int th, int scale, uint32 *addr_top)
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
122 {
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
123 int index = 0;
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
124
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
125 for (int s = 1; s < scale; s <<= 1) {
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
126 index += tw*th;
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
127 tw >>= 1; /* tw /= 2 */
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
128 th >>= 1;
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
129 }
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
130
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
131 return addr_top + index;
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
132 }
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
133
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
134
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
135 /**
184
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 180
diff changeset
136 * span の width,height と texture の width,height を比べて
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
137 * span を描画する際に使う texture の比率を求める
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
138 *
175
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
139 * @param[in] width Width of span
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
140 * @param[in] height Height of span
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
141 * @param[in] tex_width Width of 1/1 texture that span use
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
142 * @param[in] tex_height Height of 1/1 texture that span use
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
143 * @param[in] scale_max この Span で使う texture の最大縮小率
174
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
144 * 計算結果が scale_max 以上になるのを防ぐ
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
145 * @return 描画に使う texture の比率
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
146 * width と height は 1/scale の画像を使う
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
147 *
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
148 */
169
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
149 static int
174
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
150 getScale(int width, int height, int tex_width, int tex_height, int scale_max)
169
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
151 {
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
152 int base, tex_base;
169
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
153 int scale = 1;
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
154
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
155 /**
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
156 * width と height で、長い方を基準に、
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
157 * texture の scale を決める
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
158 */
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
159 if (width > height) {
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
160 base = width;
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
161 tex_base = tex_width;
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
162 } else {
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
163 base = height;
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
164 tex_base = tex_height;
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
165 }
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
166
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
167 if (tex_base > base) {
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
168 int t_scale = tex_base/base;
169
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
169 while (t_scale >>= 1) {
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
170 scale <<= 1;
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
171 }
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
172 }
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
173
359
6f3dcd2444ad change spe/CreateSpan.cpp
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents: 358
diff changeset
174 return (scale > scale_max) ? scale_max : scale;
6f3dcd2444ad change spe/CreateSpan.cpp
hiroki@henri.cr.ie.u-ryukyu.ac.jp
parents: 358
diff changeset
175 //return scale_max;
169
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
176 }
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 164
diff changeset
177
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
178 /**
133
435e0d24db39 DrawSpan のテクスチャ座標を求める部分で、width と height が逆に使われてた。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 113
diff changeset
179 * x軸に水平な辺を持つ三角形ポリゴンから、
435e0d24db39 DrawSpan のテクスチャ座標を求める部分で、width と height が逆に使われてた。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 113
diff changeset
180 * Span を抜き出す
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
181 *
175
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
182 * @param[in] spackList triangle から生成された span を格納する List
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
183 * @param[in] charge_y_top 担当する y の範囲開始地点
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
184 * @param[in] charge_y_end 担当する y の範囲終了地点
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
185 * @param[in] tex_addr triangle が参照するテクスチャの先頭アドレス
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
186 * @param[in] tex_width テクスチャの width
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
187 * @param[in] tex_height テクスチャの height
176
gongo@localhost.localdomain
parents: 175
diff changeset
188 * @param[in] tex_scale_max テクスチャの最大縮小率 (2^n)
175
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
189 * @param[in] vMin triangle の座標
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
190 * @param[in] vMid triangle の座標。triangle を二つに分けて出来た新しい座標
3cc5f0000e29 add file "ChangeLog"
gongo@localhost.localdomain
parents: 174
diff changeset
191 * @param[in] vMid10 triangle の座標
176
gongo@localhost.localdomain
parents: 175
diff changeset
192 * @param[in] length_y 分割する前の Triangle の y の長さ
gongo@localhost.localdomain
parents: 175
diff changeset
193 * @param[in] tex_y_len 分割する前の Triangle に貼られている Texture の
gongo@localhost.localdomain
parents: 175
diff changeset
194 * 長さの割合 (0 ... 1)
133
435e0d24db39 DrawSpan のテクスチャ座標を求める部分で、width と height が逆に使われてた。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 113
diff changeset
195 */
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
196 void
409
dd2ab68e4036 fix spe/*
e065746@henri.cr.ie.u-ryukyu.ac.jp
parents: 359
diff changeset
197 CreateSpan::half_triangle(SchedTask *smanager, SpanPackPtr *spackList,
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
198 int charge_y_top, int charge_y_end,
210
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
199 TriangleTexInfoPtr tex_info,
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
200 VertexPack *vMin,VertexPack *vMid,VertexPack *vMid10,
176
gongo@localhost.localdomain
parents: 175
diff changeset
201 int length_y, float tex_y_len)
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
202 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
203 float tmp_z,tmp_tex1, tmp_tex2 ,tmp_tey1,tmp_tey2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
204 float tmp_xpos,tmp_end,tmp_zpos;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
205 float start_z, end_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
206 float start_tex_x, end_tex_x, start_tex_y, end_tex_y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
207 int x, y, length;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
208
137
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
209 #if 1
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
210 // これじゃないと
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
211 // テクスチャの貼りに微妙に隙間が。謎だ
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
212 int start_y = (int)vMid->y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
213 int end_y = (int)vMin->y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
214 #else
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
215 float start_y = vMid->y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
216 float end_y = vMin->y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
217 #endif
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
218 float div_y = start_y - end_y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
219 int k = 0;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
220 int l = 1;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
221
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
222 SpanPackPtr tmp_spack;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
223
135
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
224 /**
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
225 * 三角形ポリゴンをx軸に水平に二つに分けようとして
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
226 * ある一辺がすでに水平だった場合、つまり
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
227 *
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
228 * |\
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
229 * | \
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
230 * | \
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
231 * -----
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
232 *
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
233 *
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
234 * 上のようなポリゴンだった場合は、本来なら上の部分の三角形にだけ
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
235 * half_triangle の処理をするべきだが、現在の処理だと
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
236 * この half_triangle に「上の部分の三角形」と、
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
237 * 「『下の部分の三角形と判断してしまった』直線」が来てしまう。
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
238 * 直線の部分が来ると、calc() で 0 除算とかで、値不定で暴走するので
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
239 * 現在はこれで代用。
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
240 * half_triangle 呼ぶ前にこれを判断できれば良いかもしれない。
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
241 * てかこんなんでいいのかよ。。。
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
242 */
137
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
243 #if 1
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
244 if ((int)div_y == 0) {
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
245 return;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
246 }
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
247 #else
135
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
248 if (vMid10->x == vMin->x && vMid10->y == vMin->y) {
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
249 return;
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
250 }
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
251 #endif
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
252
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
253 if (div_y < 0) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
254 div_y = -div_y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
255 k = 1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
256 l = -1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
257 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
258
135
c65aee1528ef remove xml file
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 133
diff changeset
259 for (int i = k; i < (int)div_y+1; i++) {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
260 y = (int)vMin->y + i*l;
210
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
261 #if 1
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
262
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
263 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
264 * 担当 y 範囲内
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
265 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
266 if (charge_y_top <= y && y <= charge_y_end) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
267 // 1..8 を index0, 9..16 を index1 にするために y を -1
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
268 int index = (y-1) / split_screen_h;
164
38cbb7aecc70 TilePtr は SPE で計算した方がいいと判断して変更。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 161
diff changeset
269
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
270 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
271 * 違う SpanPack を扱う場合、
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
272 * 現在の SpanPack をメインメモリに送り、
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
273 * 新しい SpanPack を取ってくる
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
274 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
275 if (index != prev_index) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
276 tmp_spack = spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
277 spack = send_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
278 send_spack = tmp_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
279
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
280 smanager->dma_wait(SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
281 smanager->dma_store(send_spack, (uint32)spackList[prev_index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
282 sizeof(SpanPack), SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
283
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
284 smanager->dma_load(spack, (uint32)spackList[index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
285 sizeof(SpanPack), SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
286 prev_index = index;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
287 smanager->dma_wait(SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
288 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
289
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
290 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
291 * 書き込む SpanPack が満杯だったら
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
292 * メインメモリで allocate した領域 (next) を持ってきて
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
293 * 現在の spack->next につなぎ、next を次の spack とする。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
294 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
295 if (spack->info.size >= MAX_SIZE_SPAN) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
296 SpanPackPtr next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
297
321
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
298 __debug_spe("CreateSpan mainMem_alloc 0x%x\n", (unsigned int)sizeof(SpanPack));
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
299 smanager->mainMem_alloc(0, sizeof(SpanPack));
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
300 smanager->mainMem_wait();
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
301 next = (SpanPackPtr)smanager->mainMem_get(0);
321
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
302 __debug_spe("CreateSpan mainMem_allocated 0x%x\n", (unsigned int)next);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
303
244
59c3b9df3c67 mail modify
e065746@localhost.localdomain
parents: 233
diff changeset
304 spack->next = next; // この部分は TaskManager でやる
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
305
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
306 tmp_spack = spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
307 spack = send_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
308 send_spack = tmp_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
309
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
310 smanager->dma_wait(SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
311 smanager->dma_store(send_spack, (uint32)spackList[index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
312 sizeof(SpanPack), SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
313
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
314 spackList[index] = next;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
315
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
316 smanager->dma_load(spack, (uint32)spackList[index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
317 sizeof(SpanPack), SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
318 smanager->dma_wait(SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
319 spack->init((index+1)*split_screen_h);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
320 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
321 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
322 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
323 * 担当範囲外だったら無視
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
324 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
325 continue;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
326 }
146
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
327
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
328 tmp_xpos = calc(vMid10->x - vMin->x ,div_y, i, vMin->x);
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
329 tmp_end = calc(vMid->x - vMin->x ,div_y, i, vMin->x);
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
330 tmp_z = calc(vMid10->z - vMin->z ,div_y, i, vMin->z);
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
331 tmp_zpos = calc(vMid->z - vMin->z ,div_y, i, vMin->z);
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
332
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
333 length = (tmp_xpos > tmp_end)
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
334 ? (int)tmp_xpos - (int)tmp_end : (int)tmp_end - (int)tmp_xpos;
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
335 if (length == 0) {
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
336 continue;
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
337 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
338
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
339 tmp_tex1 =((i/(div_y)) * vMid10->tex_x) +
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
340 ( ((div_y - i)/(div_y)) * vMin->tex_x);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
341 tmp_tex2 =( (i/(div_y)) * vMid->tex_x) +
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
342 ( ((div_y - i)/(div_y)) * vMin->tex_x);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
343
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
344 tmp_tey1 =( (i/(div_y)) * vMid10->tex_y) +
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
345 ( ((div_y - i)/(div_y)) * vMin->tex_y);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
346 tmp_tey2 =( (i/(div_y)) * vMid->tex_y) +
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
347 ( ((div_y - i)/(div_y)) * vMin->tex_y);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
348
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
349 if (tmp_xpos > tmp_end) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
350 x = (int)tmp_end;
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
351 length = (int)(tmp_xpos)-(int)(tmp_end)+1;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
352 start_z = tmp_zpos;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
353 end_z = tmp_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
354 start_tex_x = tmp_tex2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
355 end_tex_x = tmp_tex1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
356 start_tex_y = tmp_tey2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
357 end_tex_y = tmp_tey1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
358 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
359 x = (int)tmp_xpos;
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
360 length = (int)(tmp_end)-(int)(tmp_xpos)+1;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
361 start_z = tmp_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
362 end_z = tmp_zpos;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
363 start_tex_x = tmp_tex1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
364 end_tex_x = tmp_tex2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
365 start_tex_y = tmp_tey1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
366 end_tex_y = tmp_tey2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
367 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
368
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
369 smanager->dma_wait(SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
370
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
371 Span *span = &spack->span[spack->info.size++];
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
372
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
373 span->x = x;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
374 span->y = y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
375 span->length_x = length;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
376 span->start_z = start_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
377 span->end_z = end_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
378 span->tex_x1 = start_tex_x;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
379 span->tex_x2 = end_tex_x;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
380 span->tex_y1 = start_tex_y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
381 span->tex_y2 = end_tex_y;
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
382
176
gongo@localhost.localdomain
parents: 175
diff changeset
383
gongo@localhost.localdomain
parents: 175
diff changeset
384 float tex_x_len = span->tex_x2 - span->tex_x1;
174
559b48b69b76 getScale()、getTapestry から、span->length に適切なテクスチャの選択に成功
gongo@localhost.localdomain
parents: 172
diff changeset
385
176
gongo@localhost.localdomain
parents: 175
diff changeset
386 /**
gongo@localhost.localdomain
parents: 175
diff changeset
387 * tex_x_len, tex_y_len を掛ける理由は
gongo@localhost.localdomain
parents: 175
diff changeset
388 * Changelog の 2008-12-16 を参照
gongo@localhost.localdomain
parents: 175
diff changeset
389 */
gongo@localhost.localdomain
parents: 175
diff changeset
390 int scale = getScale(span->length_x, length_y,
gongo@localhost.localdomain
parents: 175
diff changeset
391 (int)(span->tex_width*tex_x_len),
210
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
392 (int)(span->tex_height*tex_y_len),
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
393 tex_info->scale_max);
233
gongo@localhost.localdomain
parents: 212
diff changeset
394 //scale = tex_info->scale_max;
176
gongo@localhost.localdomain
parents: 175
diff changeset
395
210
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
396 uint32 *tapestry = getTapestry(tex_info->width,
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
397 tex_info->height, scale,
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
398 tex_info->addr);
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
399 span->tex_addr = tapestry;
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
400 span->tex_width = tex_info->width/scale;
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
401 span->tex_height = tex_info->height/scale;
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
402 }
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
403 #else
233
gongo@localhost.localdomain
parents: 212
diff changeset
404
gongo@localhost.localdomain
parents: 212
diff changeset
405 /**
gongo@localhost.localdomain
parents: 212
diff changeset
406 * ここに SIMD 化した記述をしようとして断念
gongo@localhost.localdomain
parents: 212
diff changeset
407 */
203
5c6c9667ac61 fix CreateSpan::run
gongo@localhost.localdomain
parents: 194
diff changeset
408
210
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
409 #endif
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
410
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
411 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
412
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
413
467
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
414 static int
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
415 run(SchedTask *smanager, void *rbuf, void *wbuf)
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
416 {
467
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
417 smanager->__debug_spe("CreateSpan\n");
321
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
418
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
419 PolygonPack *pp = (PolygonPack*)smanager->get_input(0);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
420 PolygonPack *next_pp =
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
421 (PolygonPack*)smanager->allocate(sizeof(PolygonPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
422 PolygonPack *free_pp = next_pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
423 PolygonPack *tmp_pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
424
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
425 TrianglePackPtr triPack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
426 VertexPackPtr vMin, vMid, vMax;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
427 VertexPackPtr vMid10
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
428 = (VertexPackPtr)smanager->allocate(sizeof(VertexPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
429
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
430 SpanPackPtr *spackList = (SpanPackPtr*)smanager->get_input(1);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
431 spack = (SpanPackPtr)smanager->get_input(2);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
432 send_spack = (SpanPackPtr)smanager->allocate(sizeof(SpanPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
433 prev_index = get_param(0);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
434
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
435 // spack と send_spack は swap しながら DMA を繰り返すので
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
436 // 自分で allocate した send_spack を覚えてないといけない
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
437 SpanPackPtr free_spack = send_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
438
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
439 int charge_y_top = get_param(1);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
440 int charge_y_end = get_param(2);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
441
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
442 do {
467
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
443 smanager->__debug_spe("CreateSpan allocated 0x%x\n",(uint32)next_pp);
321
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
444
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
445 if (pp->next != NULL) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
446 smanager->dma_load(next_pp, (uint32)pp->next,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
447 sizeof(PolygonPack), POLYGON_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
448 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
449 next_pp = NULL;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
450 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
451
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
452 for (int i = 0; i < pp->info.size; i++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
453 triPack = &pp->tri[i];
210
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
454
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
455 TriangleTexInfoPtr tri_tex_info = &triPack->tex_info;
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
456
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
457 make_vertex(triPack, &vMin, &vMid, &vMax);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
458 make_vMid10(vMid10, vMin, vMid, vMax);
133
435e0d24db39 DrawSpan のテクスチャ座標を求める部分で、width と height が逆に使われてた。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 113
diff changeset
459
435e0d24db39 DrawSpan のテクスチャ座標を求める部分で、width と height が逆に使われてた。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 113
diff changeset
460 /**
435e0d24db39 DrawSpan のテクスチャ座標を求める部分で、width と height が逆に使われてた。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 113
diff changeset
461 * ポリゴンを、x軸に水平に分割して二つの三角形を作り、
435e0d24db39 DrawSpan のテクスチャ座標を求める部分で、width と height が逆に使われてた。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 113
diff changeset
462 * それぞれから Span を求める
172
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
463 *
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
464 * vMax
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
465 * |\
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
466 * | \
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
467 * | \
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
468 * | \
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
469 * vMid10 ------ vMid
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
470 * | /
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
471 * | /
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
472 * | /
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
473 * |/
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
474 * vMin
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
475 *
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
476 * (vMax, vMid, vMin) という triangle を
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
477 * (vMax, vMid, vMid10) (vMin, vMid, vMid10) という
c09f506bf5c9 CreateSpan に getScale を追加
gongo@localhost.localdomain
parents: 170
diff changeset
478 * 二つの Triangle に分けている
133
435e0d24db39 DrawSpan のテクスチャ座標を求める部分で、width と height が逆に使われてた。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 113
diff changeset
479 */
409
dd2ab68e4036 fix spe/*
e065746@henri.cr.ie.u-ryukyu.ac.jp
parents: 359
diff changeset
480 half_triangle(smanager, spackList, charge_y_top, charge_y_end,
210
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
481 tri_tex_info, vMin, vMid, vMid10,
176
gongo@localhost.localdomain
parents: 175
diff changeset
482 (int)(vMax->y - vMin->y), vMax->tex_y - vMin->tex_y);
409
dd2ab68e4036 fix spe/*
e065746@henri.cr.ie.u-ryukyu.ac.jp
parents: 359
diff changeset
483 half_triangle(smanager, spackList, charge_y_top, charge_y_end,
210
204b03ca98f8 fix DrawSpan
gongo@localhost.localdomain
parents: 203
diff changeset
484 tri_tex_info, vMax, vMid, vMid10,
176
gongo@localhost.localdomain
parents: 175
diff changeset
485 (int)(vMax->y - vMin->y), vMax->tex_y - vMin->tex_y);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
486 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
487
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
488 smanager->dma_wait(POLYGON_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
489
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
490 tmp_pp = pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
491 pp = next_pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
492 next_pp = tmp_pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
493 } while (pp);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
494
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
495 smanager->dma_wait(SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
496 smanager->dma_store(spack, (uint32)spackList[prev_index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
497 sizeof(SpanPack), SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
498 smanager->dma_wait(SPAN_PACK_STORE);
467
44c0bce54dcf fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
499 smanager->__debug_spe("CreateSpan spack_stored 0x%x\n",(uint32)spackList[prev_index]);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
500
244
59c3b9df3c67 mail modify
e065746@localhost.localdomain
parents: 233
diff changeset
501 // smanager で allocate したのだから free も smanager でやるべき
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
502 free(free_pp);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
503 free(free_spack);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
504 free(vMid10);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
505
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
506 return 0;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
507 }