annotate TaskManager/Test/test_render/task/CreateSpan.cpp @ 161:1f4c3f3238e6 fullHD_omedetou

texture の座標がマイナスになったあと、それを 0 にし忘れてた
author gongo@localhost.localdomain
date Mon, 08 Dec 2008 16:37:02 +0900
parents cd5ad7adc5e1
children 38cbb7aecc70
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
1 #include "CreateSpan.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
2 #include "viewer_types.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
3
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
4 static const int SPAN_PACK_LOAD = 5;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
5 static const int SPAN_PACK_STORE = 6;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
6 static const int POLYGON_PACK_LOAD = 7;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
7 static const int TILE_ALLOCATE = 8;
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
8 static const int TILE_LOAD = 9;
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
9 static const int TILE_STORE = 10;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
10
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
11 static SpanPackPtr spack = NULL;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
12 static SpanPackPtr send_spack = NULL;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
13 static int prev_index = 0;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
14
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
15 SchedDefineTask(CreateSpan);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
16
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
17 static float
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
18 calc(float f1, float f2,int i, float base)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
19 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
20 float ans;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
21 ans = f1/f2*i + base;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
22 return ans;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
23 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
24
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
25
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
26 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
27 * TrianglePack から、vMin, vMid, vMax を求める
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
28 *
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
29 * @param [triPack] TrianglePack
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
30 * @param [vMin] [vMid] [vMax]
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
31 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
32 static void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
33 make_vertex(TrianglePack *triPack,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
34 VertexPackPtr *vMin, VertexPackPtr *vMid, VertexPackPtr *vMax)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
35 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
36 if (triPack->ver1.y <= triPack->ver2.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
37 if (triPack->ver2.y <= triPack->ver3.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
38 *vMin = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
39 *vMid = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
40 *vMax = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
41 } else if (triPack->ver3.y <= triPack->ver1.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
42 *vMin = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
43 *vMid = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
44 *vMax = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
45 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
46 *vMin = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
47 *vMid = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
48 *vMax = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
49 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
50 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
51 if (triPack->ver1.y <= triPack->ver3.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
52 *vMin = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
53 *vMid = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
54 *vMax = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
55 } else if (triPack->ver3.y <= triPack->ver2.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
56 *vMin = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
57 *vMid = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
58 *vMax = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
59 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
60 *vMin = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
61 *vMid = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
62 *vMax = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
63 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
64 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
65 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
66
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
67 static void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
68 make_vMid10(VertexPack *v, VertexPack *vMin,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
69 VertexPack *vMid, VertexPack *vMax)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
70 {
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
71 //int d, d1;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
72 float d;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
73 int d1;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
74
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
75 d = vMax->y - vMin->y;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
76 d1 = (int)(vMid->y - vMin->y);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
77
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
78 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
79 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
80 v->x = calc(vMax->x - vMin->x, d, d1, vMin->x);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
81 v->y = vMid->y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
82 v->z = calc(vMax->z - vMin->z, d, d1, vMin->z);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
83 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
84
156
gongo@gendarme.local
parents: 155
diff changeset
85 /**
161
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
86 * テクスチャは、TEXTURE_SPLIT_PIXEL^2 のブロックに分割する
156
gongo@gendarme.local
parents: 155
diff changeset
87 *
161
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
88 * +---+---+---+---+---+---+
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
89 * | 0 | 1 | 2 | 3 | 4 | 5 |
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
90 * +---+---+---+---+---+---+
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
91 * | | | | | |11 |
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
92 * +---+---+---+---+---+---+
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
93 * | | | | | |17 |
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
94 * +---+---+---+---+---+---+
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
95 * | | | | | |23 |
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
96 * +---+---+---+---+---+---+
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
97 * | | | | | |29 |
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
98 * +---+---+---+---+---+---+
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
99 * | | | | | |35 |
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
100 * +---+---+---+---+---+---+
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
101 *
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
102 * 一辺を TEXTURE_SPLIT とする
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
103 * 各ブロックの数字がブロックIDとなる。
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
104 */
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
105
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
106 /**
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
107 * テクスチャの座標から、
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
108 * テクスチャのどのブロックかを求める
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
109 *
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
110 * @param[in] tx X coordinates of texture
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
111 * @param[in] tx Y coordinates of texture
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
112 * @param[in] twidth Width of texture
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
113 * @return block ID
156
gongo@gendarme.local
parents: 155
diff changeset
114 */
gongo@gendarme.local
parents: 155
diff changeset
115 static int
161
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
116 get_tex_block(int tx, int ty, int twidth)
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
117 {
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
118 int blockX, blockY;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
119
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
120 blockX = tx / TEXTURE_SPLIT_PIXEL;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
121 blockY = ty / TEXTURE_SPLIT_PIXEL;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
122
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
123 return blockX + (twidth/TEXTURE_SPLIT_PIXEL)*blockY;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
124 }
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
125
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
126 void
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
127 CreateSpan::setTileInfo(TileInfoPtr tile, int xpos, int ypos,
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
128 int tex_width, uint32* tex_addr_top)
156
gongo@gendarme.local
parents: 155
diff changeset
129 {
161
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
130 /*
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
131 * テクスチャの座標 (tex_xpos, tex_ypos) の
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
132 * 分割したブロック内での座標
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
133 * 例:
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
134 * (450, 318) -> 分割されたブロックの (2, 6) になる
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
135 */
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
136 tile->tix = xpos % TEXTURE_SPLIT_PIXEL;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
137 tile->tiy = ypos % TEXTURE_SPLIT_PIXEL;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
138
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
139 /**
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
140 * ブロックIDから、あらかじめ分割したテクスチャの
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
141 * 先頭addressの addr からの距離を求める。
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
142 * それがこの 1 pixel が使うテクスチャのブロックになる
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
143 */
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
144 int block = get_tex_block(xpos, ypos, tex_width);
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
145 tile->tile = (void*)(tex_addr_top + block*TEXTURE_BLOCK_SIZE);
156
gongo@gendarme.local
parents: 155
diff changeset
146 }
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
147
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
148 /**
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
149 * Span の1ドットずつ、必要なテクスチャのブロック(Tile)を求めていく
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
150 */
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
151 void
161
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
152 CreateSpan::setTileInfoList(SpanPtr span)
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
153 {
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
154 TileInfoListPtr tilelist =
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
155 (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList));
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
156 TileInfoListPtr send_tilelist =
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
157 (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList));
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
158 TileInfoListPtr tilelist_addr;
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
159 TileInfoListPtr send_tilelist_addr;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
160 TileInfoPtr tile;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
161
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
162 int cur_x = 0;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
163 int len = 0;
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
164
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
165 smanager->mainMem_wait();
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
166 tilelist_addr = (TileInfoListPtr)smanager->mainMem_get(TILE_ALLOCATE);
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
167 span->tilelist = tilelist_addr;
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
168
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
169 float tex1 = span->tex_x1;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
170 float tex2 = span->tex_x2;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
171 float tey1 = span->tex_y1;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
172 float tey2 = span->tex_y2;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
173 int tex_xpos;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
174 int tex_ypos;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
175 int end = span->length_x;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
176
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
177 if (span->length_x == 1) {
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
178 tilelist->init();
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
179
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
180 tex_xpos = (int)((span->tex_width-1) * tex1);
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
181 tex_ypos = (int)((span->tex_height-1) * tey1);
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
182
161
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
183 tile = &tilelist->tileinfo[tilelist->size++];
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
184 setTileInfo(tile, tex_xpos, tex_ypos, span->tex_width,
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
185 (uint32*)span->tex_addr);
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
186 } else {
154
f4673e790675 task/ と spe/ の同期し忘れ。
gongo@gendarme.local
parents: 148
diff changeset
187 while (cur_x <= span->length_x) {
f4673e790675 task/ と spe/ の同期し忘れ。
gongo@gendarme.local
parents: 148
diff changeset
188 if (cur_x + MAX_TILE_LIST - 1 < span->length_x) {
f4673e790675 task/ と spe/ の同期し忘れ。
gongo@gendarme.local
parents: 148
diff changeset
189 len = MAX_TILE_LIST - 1;
148
9642aeef298d Span への Texture List の渡し。じゃっかん texture がバグってるので
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 146
diff changeset
190 smanager->mainMem_alloc(TILE_ALLOCATE, sizeof(TileInfoList));
146
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
191 } else {
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
192 len = span->length_x - cur_x;
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
193 }
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
194
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
195 float tex_x, tex_y;
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
196
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
197 tilelist->init();
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
198
154
f4673e790675 task/ と spe/ の同期し忘れ。
gongo@gendarme.local
parents: 148
diff changeset
199 for (int i = cur_x; i <= cur_x + len; i++) {
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
200 tex_x = tex1*(end-1-i)/(end-1) + tex2*i/(end-1);
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
201 tex_y = tey1*(end-1-i)/(end-1) + tey2*i/(end-1);
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
202 if (tex_x > 1) tex_x = 1;
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
203 if (tex_y > 1) tex_y = 1;
154
f4673e790675 task/ と spe/ の同期し忘れ。
gongo@gendarme.local
parents: 148
diff changeset
204 tex_xpos = (int)((span->tex_width-1) * tex_x);
f4673e790675 task/ と spe/ の同期し忘れ。
gongo@gendarme.local
parents: 148
diff changeset
205 tex_ypos = (int)((span->tex_height-1) * tex_y);
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
206
161
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
207 /**
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
208 * 座標が [0..MAX-1] を超えない様に
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
209 * なんかもっと良い書き方ありそうだけど
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
210 */
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
211 if (tex_xpos < 0) tex_xpos = 0;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
212 if (span->tex_width - 1 < tex_xpos) {
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
213 tex_xpos = span->tex_width - 1;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
214 }
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
215 if (tex_ypos < 0) tex_ypos = 0;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
216 if (span->tex_height - 1 < tex_ypos) {
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
217 tex_ypos = span->tex_height - 1;
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
218 }
154
f4673e790675 task/ と spe/ の同期し忘れ。
gongo@gendarme.local
parents: 148
diff changeset
219
161
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
220 tile = &tilelist->tileinfo[tilelist->size++];
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
221 setTileInfo(tile, tex_xpos, tex_ypos, span->tex_width,
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
222 (uint32*)span->tex_addr);
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
223 }
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
224
154
f4673e790675 task/ と spe/ の同期し忘れ。
gongo@gendarme.local
parents: 148
diff changeset
225 if (cur_x + MAX_TILE_LIST - 1 < span->length_x) {
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
226 TileInfoListPtr tmp = tilelist;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
227 tilelist = send_tilelist;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
228 send_tilelist = tmp;
146
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
229
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
230 send_tilelist_addr = tilelist_addr;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
231
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
232 smanager->mainMem_wait();
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
233 tilelist_addr =
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
234 (TileInfoListPtr)smanager->mainMem_get(TILE_ALLOCATE);
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
235
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
236 send_tilelist->next = tilelist_addr;
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
237
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
238 smanager->dma_wait(TILE_STORE);
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
239 smanager->dma_store(send_tilelist, (uint32)send_tilelist_addr,
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
240 sizeof(TileInfoList), TILE_STORE);
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
241 }
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
242
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
243 cur_x += MAX_TILE_LIST;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
244 }
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
245 }
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
246
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
247 smanager->dma_wait(TILE_STORE);
155
77dac07efd79 TextureInfoList がずれてたのを修正
gongo@gendarme.local
parents: 154
diff changeset
248 tilelist->next = NULL;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
249 smanager->dma_store(tilelist, (uint32)tilelist_addr,
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
250 sizeof(TileInfoList), TILE_STORE);
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
251 free(send_tilelist);
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
252
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
253 smanager->dma_wait(TILE_STORE);
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
254
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
255 free(tilelist);
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
256 }
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
257
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
258 /**
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
259 * x軸に水平な辺を持つ三角形ポリゴンから、
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
260 * Span を抜き出す
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
261 */
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
262 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
263 CreateSpan::half_triangle(SpanPackPtr *spackList,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
264 int charge_y_top, int charge_y_end,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
265 long *tex_addr, long tex_width, long tex_height,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
266 VertexPack *vMin,VertexPack *vMid,VertexPack *vMid10)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
267 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
268 float tmp_z,tmp_tex1, tmp_tex2 ,tmp_tey1,tmp_tey2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
269 float tmp_xpos,tmp_end,tmp_zpos;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
270 float start_z, end_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
271 float start_tex_x, end_tex_x, start_tex_y, end_tex_y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
272 int x, y, length;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
273
137
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
274 #if 1
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
275 // これじゃないと
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
276 // テクスチャの貼りに微妙に隙間が。謎だ
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
277 int start_y = (int)vMid->y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
278 int end_y = (int)vMin->y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
279 #else
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
280 float start_y = vMid->y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
281 float end_y = vMin->y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
282 #endif
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
283 float div_y = start_y - end_y;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
284 int k = 0;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
285 int l = 1;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
286
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
287 SpanPackPtr tmp_spack;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
288
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
289 /**
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
290 * 三角形ポリゴンをx軸に水平に二つに分けようとして
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
291 * ある一辺がすでに水平だった場合、つまり
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
292 * (環境によっては、back slash が 円マークかも)
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
293 *
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
294 * |\
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
295 * | \
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
296 * | \
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
297 * -----
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
298 *
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
299 *
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
300 * 上のようなポリゴンだった場合は、本来なら上の部分の三角形にだけ
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
301 * half_triangle の処理をするべきだが、現在の処理だと
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
302 * この half_triangle に「上の部分の三角形」と、
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
303 * 「『下の部分の三角形と判断してしまった』直線」が来てしまう。
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
304 * 直線の部分が来ると、calc() で 0 除算とかで、値不定で暴走するので
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
305 * 現在はこれで代用。
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
306 * half_triangle 呼ぶ前にこれを判断できれば良いかもしれない。
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
307 * てかこんなんでいいのかよ。。。
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
308 *
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
309 */
137
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
310 #if 1
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
311 if ((int)div_y == 0) {
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
312 return;
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
313 }
6cf991f28c6c SceneGraphPack の代わりに、今は SceneGraph をそのまま使う様に設定。
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 135
diff changeset
314 #else
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
315 if (vMid10->x == vMin->x && vMid10->y == vMin->y) {
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
316 return;
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
317 }
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
318 #endif
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
319
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
320 if (div_y < 0) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
321 div_y = -div_y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
322 k = 1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
323 l = -1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
324 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
325
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
326 for (int i = k; i < (int)div_y+1; i++) {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
327 y = (int)vMin->y + i*l;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
328
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
329 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
330 * 担当 y 範囲内
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
331 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
332 if (charge_y_top <= y && y <= charge_y_end) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
333 // 1..8 を index0, 9..16 を index1 にするために y を -1
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
334 int index = (y-1) / split_screen_h;
155
77dac07efd79 TextureInfoList がずれてたのを修正
gongo@gendarme.local
parents: 154
diff changeset
335 //if (index != 0) continue;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
336 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
337 * 違う SpanPack を扱う場合、
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
338 * 現在の SpanPack をメインメモリに送り、
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
339 * 新しい SpanPack を取ってくる
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
340 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
341 if (index != prev_index) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
342 tmp_spack = spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
343 spack = send_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
344 send_spack = tmp_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
345
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
346 smanager->dma_wait(SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
347 smanager->dma_store(send_spack, (uint32)spackList[prev_index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
348 sizeof(SpanPack), SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
349
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
350 smanager->dma_load(spack, (uint32)spackList[index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
351 sizeof(SpanPack), SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
352 prev_index = index;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
353 smanager->dma_wait(SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
354 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
355
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
356 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
357 * 書き込む SpanPack が満杯だったら
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
358 * メインメモリで allocate した領域 (next) を持ってきて
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
359 * 現在の spack->next につなぎ、next を次の spack とする。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
360 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
361 if (spack->info.size >= MAX_SIZE_SPAN) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
362 SpanPackPtr next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
363
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
364 smanager->mainMem_alloc(0, sizeof(SpanPack));
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
365 smanager->mainMem_wait();
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
366 next = (SpanPackPtr)smanager->mainMem_get(0);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
367
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
368 spack->next = next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
369
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
370 tmp_spack = spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
371 spack = send_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
372 send_spack = tmp_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
373
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
374 smanager->dma_wait(SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
375 smanager->dma_store(send_spack, (uint32)spackList[index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
376 sizeof(SpanPack), SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
377
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
378 spackList[index] = next;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
379
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
380 smanager->dma_load(spack, (uint32)spackList[index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
381 sizeof(SpanPack), SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
382 smanager->dma_wait(SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
383 spack->init((index+1)*split_screen_h);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
384 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
385 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
386 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
387 * 担当範囲外だったら無視
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
388 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
389 continue;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
390 }
146
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
391
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
392 tmp_xpos = calc(vMid10->x - vMin->x ,div_y, i, vMin->x);
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
393 tmp_end = calc(vMid->x - vMin->x ,div_y, i, vMin->x);
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
394 tmp_z = calc(vMid10->z - vMin->z ,div_y, i, vMin->z);
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
395 tmp_zpos = calc(vMid->z - vMin->z ,div_y, i, vMin->z);
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
396
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
397 length = (tmp_xpos > tmp_end)
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
398 ? (int)tmp_xpos - (int)tmp_end : (int)tmp_end - (int)tmp_xpos;
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
399 if (length == 0) {
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
400 continue;
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
401 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
402
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
403 /**
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 137
diff changeset
404 * メインメモリに、Tile 用の領域確保をここで指定しておく
142
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
405 */
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
406 // ちと仕様変更によりここでは使わない
ff3fb47c2553 add xml
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 141
diff changeset
407 // 予めやっておいて、その間に処理、だとちょっと動作が怪しいらしい
146
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
408 smanager->mainMem_alloc(TILE_ALLOCATE, sizeof(TileInfoList));
2284efc89f63 TileList の生成の修正
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 142
diff changeset
409
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
410 tmp_tex1 =((i/(div_y)) * vMid10->tex_x) +
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
411 ( ((div_y - i)/(div_y)) * vMin->tex_x);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
412 tmp_tex2 =( (i/(div_y)) * vMid->tex_x) +
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
413 ( ((div_y - i)/(div_y)) * vMin->tex_x);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
414
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
415 tmp_tey1 =( (i/(div_y)) * vMid10->tex_y) +
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
416 ( ((div_y - i)/(div_y)) * vMin->tex_y);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
417 tmp_tey2 =( (i/(div_y)) * vMid->tex_y) +
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
418 ( ((div_y - i)/(div_y)) * vMin->tex_y);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
419
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
420 if (tmp_xpos > tmp_end) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
421 x = (int)tmp_end;
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
422 /**
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
423 * +1 は要らない気がする・・・
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
424 */
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
425 //length = (int)(tmp_xpos)-(int)(tmp_end)+1;
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
426 length = (int)(tmp_xpos)-(int)(tmp_end);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
427 start_z = tmp_zpos;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
428 end_z = tmp_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
429 start_tex_x = tmp_tex2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
430 end_tex_x = tmp_tex1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
431 start_tex_y = tmp_tey2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
432 end_tex_y = tmp_tey1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
433 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
434 x = (int)tmp_xpos;
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
435 //length = (int)(tmp_end)-(int)(tmp_xpos)+1;
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
436 length = (int)(tmp_end)-(int)(tmp_xpos);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
437 start_z = tmp_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
438 end_z = tmp_zpos;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
439 start_tex_x = tmp_tex1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
440 end_tex_x = tmp_tex2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
441 start_tex_y = tmp_tey1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
442 end_tex_y = tmp_tey2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
443 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
444
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
445 smanager->dma_wait(SPAN_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
446
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
447 Span *span = &spack->span[spack->info.size++];
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
448
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
449 span->tex_addr = tex_addr;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
450 span->tex_width = tex_width;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
451 span->tex_height = tex_height;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
452 span->x = x;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
453 span->y = y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
454 span->length_x = length;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
455 span->start_z = start_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
456 span->end_z = end_z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
457 span->tex_x1 = start_tex_x;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
458 span->tex_x2 = end_tex_x;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
459 span->tex_y1 = start_tex_y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
460 span->tex_y2 = end_tex_y;
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
461
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
462 // TilePtr の計算
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
463 // tix, tiy (Tile 内での x, y)
161
1f4c3f3238e6 texture の座標がマイナスになったあと、それを 0 にし忘れてた
gongo@localhost.localdomain
parents: 156
diff changeset
464 setTileInfoList(span);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
465 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
466 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
467
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
468
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
469 int
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
470 CreateSpan::run(void *rbuf, void *wbuf)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
471 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
472 PolygonPack *pp = (PolygonPack*)smanager->get_input(0);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
473 PolygonPack *next_pp =
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
474 (PolygonPack*)smanager->allocate(sizeof(PolygonPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
475 PolygonPack *free_pp = next_pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
476 PolygonPack *tmp_pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
477
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
478 TrianglePackPtr triPack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
479 VertexPackPtr vMin, vMid, vMax;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
480 VertexPackPtr vMid10
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
481 = (VertexPackPtr)smanager->allocate(sizeof(VertexPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
482
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
483 SpanPackPtr *spackList = (SpanPackPtr*)smanager->get_input(1);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
484 spack = (SpanPackPtr)smanager->get_input(2);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
485 send_spack = (SpanPackPtr)smanager->allocate(sizeof(SpanPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
486 prev_index = get_param(0);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
487
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
488 // spack と send_spack は swap しながら DMA を繰り返すので
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
489 // 自分で allocate した send_spack を覚えてないといけない
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
490 SpanPackPtr free_spack = send_spack;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
491
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
492 int charge_y_top = get_param(1);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
493 int charge_y_end = get_param(2);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
494
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
495 do {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
496 if (pp->next != NULL) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
497 smanager->dma_load(next_pp, (uint32)pp->next,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
498 sizeof(PolygonPack), POLYGON_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
499 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
500 next_pp = NULL;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
501 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
502
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
503 for (int i = 0; i < pp->info.size; i++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
504 triPack = &pp->tri[i];
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
505
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
506 #if 0
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
507 make_vertex(triPack, &vMin, &vMid, &vMax);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
508 #else
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
509 if (triPack->ver1.y <= triPack->ver2.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
510 if (triPack->ver2.y <= triPack->ver3.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
511 vMin = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
512 vMid = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
513 vMax = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
514 } else if (triPack->ver3.y <= triPack->ver1.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
515 vMin = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
516 vMid = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
517 vMax = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
518 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
519 vMin = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
520 vMid = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
521 vMax = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
522 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
523 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
524 if (triPack->ver1.y <= triPack->ver3.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
525 vMin = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
526 vMid = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
527 vMax = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
528 } else if (triPack->ver3.y <= triPack->ver2.y) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
529 vMin = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
530 vMid = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
531 vMax = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
532 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
533 vMin = &triPack->ver2;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
534 vMid = &triPack->ver3;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
535 vMax = &triPack->ver1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
536 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
537 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
538 #endif
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
539 make_vMid10(vMid10, vMin, vMid, vMax);
134
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
540
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
541 /**
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
542 * ポリゴンを、x軸に水平に分割して二つの三角形を作り、
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
543 * それぞれから Span を求める
92fcce4330f3 CreateSpan で、三角形を二つに割る時、
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
544 */
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
545 half_triangle(spackList, charge_y_top, charge_y_end,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
546 triPack->tex_addr, triPack->tex_width,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
547 triPack->tex_height, vMin, vMid, vMid10);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
548 half_triangle(spackList, charge_y_top, charge_y_end,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
549 pp->tri[0].tex_addr, pp->tri[0].tex_width,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
550 pp->tri[0].tex_height, vMax, vMid, vMid10);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
551 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
552
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
553 smanager->dma_wait(POLYGON_PACK_LOAD);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
554
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
555 tmp_pp = pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
556 pp = next_pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
557 next_pp = tmp_pp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
558 } while (pp);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
559
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
560 smanager->dma_wait(SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
561 smanager->dma_store(spack, (uint32)spackList[prev_index],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
562 sizeof(SpanPack), SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
563 smanager->dma_wait(SPAN_PACK_STORE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
564
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
565 free(free_pp);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
566 free(free_spack);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
567 free(vMid10);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
568
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
569 return 0;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
570 }