annotate old/simple_render/viewer.cpp @ 507:735f76483bb2

Reorganization..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 12 Oct 2009 09:39:35 +0900
parents TaskManager/Test/simple_render/viewer.cpp@5c194c71eca8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
1 #include <iostream>
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
2 #include <SDL.h>
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
3 #include "polygon.h"
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
4 #include "viewer.h"
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
5 #include "sys.h"
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
6 #include "SpuSpan.h"
105
3e331f7576a1 *** empty log message ***
gongo
parents: 102
diff changeset
7 #include "Func.h"
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
8 #include "error.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
9 #include "fb.h"
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
10 using namespace std;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
11
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
12 int Viewer::width;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
13 int Viewer::height;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
14 int Viewer::bpp;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
15 int Viewer::spe_num;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
16
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
17 #define redMask 0x00ff0000
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
18 #define greenMask 0x0000ff00
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
19 #define blueMask 0x000000ff
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
20 #define alphaMask 0
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
21
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
22 extern int create_sgp(Polygon *sg, SceneGraphPack *sgp);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
23
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
24 #if 0
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
25 #define MEMORY_ALLOCATION(dest, align, size) \
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
26 posix_memalign((void**)(dest), (align), (size))
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
27 //void posix_memalign(void** dest, size_t align, size_t size){
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
28 //*dest = malloc(size);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
29 //}
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
30 #else
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
31 #define MEMORY_ALLOCATION(dest, align, size) \
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
32 *((void**)dest) = malloc((size))
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
33 #endif
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
34
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
35
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
36
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
37
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
38 Viewer::Viewer(int b, int w, int h)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
39 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
40 bpp = b;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
41 width = w;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
42 height = h;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
43 spe_num = 1;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
44 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
45
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
46 Viewer::Viewer(int b, int w, int h, int _num)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
47 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
48 bpp = b;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
49 width = w;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
50 height = h;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
51 spe_num = _num;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
52 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
53
102
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
54 unsigned int fbdev_addr;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
55
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
56 void Viewer::sdl_init()
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
57 {
67
7d2874fb0671 *** empty log message ***
gongo
parents: 63
diff changeset
58 if (SDL_Init( SDL_INIT_VIDEO ) < 0) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
59 fprintf(stderr,"Couldn't initialize SDL: %s\n",SDL_GetError());
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
60 exit( 1 );
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
61 }
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
62
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
63 #ifndef _DEBUG
67
7d2874fb0671 *** empty log message ***
gongo
parents: 63
diff changeset
64 screen = SDL_SetVideoMode( width, height, bpp, SDL_HWSURFACE);
7d2874fb0671 *** empty log message ***
gongo
parents: 63
diff changeset
65 if (screen == NULL) {
7d2874fb0671 *** empty log message ***
gongo
parents: 63
diff changeset
66 fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError());
7d2874fb0671 *** empty log message ***
gongo
parents: 63
diff changeset
67 SDL_Quit();
7d2874fb0671 *** empty log message ***
gongo
parents: 63
diff changeset
68 exit(1);
7d2874fb0671 *** empty log message ***
gongo
parents: 63
diff changeset
69 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
70 fbdev_addr = (uint32)screen->pixels;
70
178459e03f5c *** empty log message ***
gongo
parents: 67
diff changeset
71 #else
102
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
72 fbdev_addr = get_fbdev_addr();
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
73 if (fbdev_addr == 0) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
74 fbdev_addr = (unsigned int)(new Uint32[width*height*32/8]);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
75 }
102
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
76 screen = SDL_CreateRGBSurfaceFrom((void*)fbdev_addr, width, height, 32,
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
77 width*4, redMask, greenMask,
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
78 blueMask, alphaMask);
70
178459e03f5c *** empty log message ***
gongo
parents: 67
diff changeset
79 #endif
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
80 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
81
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
82
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
83 int Viewer::get_ticks()
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
84 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
85 int time;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
86 time = SDL_GetTicks();
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
87 return time;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
88 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
89
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
90 bool Viewer::quit_check()
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
91 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
92 bool quit = false;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
93 SDL_Event event;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
94 while(SDL_PollEvent(&event))
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
95 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
96 if(event.type==SDL_QUIT)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
97 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
98 quit = true;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
99 return quit;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
100 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
101 }
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
102 return quit;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
103 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
104
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
105 void Viewer::quit()
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
106 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
107 SDL_Quit();
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
108 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
109
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
110
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
111 void Viewer::swap_buffers()
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
112 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
113 SDL_GL_SwapBuffers();
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
114 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
115
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
116
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
117 void
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
118 Viewer::write_pixel(int x, int y,float z, Uint32 rgb)
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
119 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
120 x += width/2;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
121 y += height/2;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
122
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
123 if (z < zRow[x][y]) {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
124 if (x < width && x > 0 && y > 0 && y < height) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
125 zRow[x][y] = z;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
126 y = height - y;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
127 pixels[width*y + x] = rgb;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
128 }
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
129 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
130 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
131
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
132 void
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
133 Viewer::write_line(float x1, float y1, float x2, float y2, Uint32 rgb)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
134 {
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
135 if (x1 > x2) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
136 float x=0;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
137 float y=0;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
138 x=x1;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
139 y=y1;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
140 x1 = x2;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
141 y1 = y2;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
142 x2 = x;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
143 y2 = y;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
144 }
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
145
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
146 float s = y1;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
147
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
148 if ((int)x1 == (int)x2) {
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
149 if (y1 > y2) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
150 float y=0;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
151 y = y1;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
152 y1 = y2;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
153 y2 = y;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
154 }
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
155
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
156 for (float i=y1; i<y2; i++) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
157 //write_pixel((int)x1,(int)i);
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
158 write_pixel((int)x1,(int)i,0,rgb);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
159 }
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
160 } else {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
161 float t = (y2 - y1)/(x2 - x1);
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
162 if (t < -1) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
163 float f = 0;
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
164 for (float i=x1; i<x2; i++) {
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
165 for (float a=(int)t; a<0; a++) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
166 write_pixel((int)i,(int)s,0,rgb);
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
167 s--;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
168 }
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
169
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
170 f += t-(int)t;
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
171
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
172 if (f <= -1) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
173 write_pixel((int)i,(int)s,0,rgb);
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
174 f = 0;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
175 s--;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
176 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
177 }
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
178 } else if (t <= 1) {
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
179 for(float i=x1; i<x2; i++) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
180 //write_pixel((int)i,(int)s);
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
181 write_pixel((int)i,(int)s,0,rgb);
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
182 s += t;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
183 }
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
184 } else {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
185 float f = 0;
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
186 for (float i=x1; i<x2; i++) {
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
187 for (float a=0; a<(int)t; a++) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
188 write_pixel((int)i,(int)s,0,rgb);
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
189 s++;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
190 }
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
191
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
192 f += t-(int)t;
51
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
193
c964110017c8 *** empty log message ***
gongo
parents: 50
diff changeset
194 if (f >= 1) {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
195 write_pixel((int)i,(int)s,0,rgb);
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
196 f = 0;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
197 s++;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
198 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
199 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
200 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
201 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
202 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
203
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
204 void Viewer::write_triangle(float x1, float y1, float x2, float y2, float x3, float y3, Uint32 rgb)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
205 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
206 write_line(x1,y1,x2,y2,rgb);
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
207 write_line(x2,y2,x3,y3,rgb);
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
208 write_line(x3,y3,x1,y1,rgb);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
209 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
210
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
211 void Viewer::clean_pixels()
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
212 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
213 #if 0
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
214 for(int i=0; i<width*height; i++)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
215 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
216 pixels[i] = 0x00;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
217 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
218 #else
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
219 bzero(pixels, sizeof(int)*width*height);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
220 #endif
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
221 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
222
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
223 void Viewer::graph_line()
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
224 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
225 int xl = width*height/2;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
226 int yl = width/2;
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
227 for(int i=0; i<width; i++)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
228 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
229 for(int t=0; t<height; t+=20)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
230 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
231 pixels[width*t+i] = 0x5a;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
232 }
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
233 pixels[xl +i] = 0xff;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
234 }
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
235 for(int i=0; i<height; i++)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
236 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
237 for(int t=0; t<width; t+=20)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
238 {
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
239 pixels[i*width+t] = 0x5a;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
240 }
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
241 pixels[i*width+yl] = 0xff;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
242 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
243 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
244
54
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
245 int start_time;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
246 int this_time;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
247 int frames;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
248 SDL_Surface *bitmap;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
249 SDL_PixelFormat *pixelFormat;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
250 Uint32 background;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
251 Polygon *polygon;
88
504899860e66 *** empty log message ***
gongo
parents: 87
diff changeset
252 SceneGraphPack *sgp;
504899860e66 *** empty log message ***
gongo
parents: 87
diff changeset
253 PolygonPack *pp;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
254 SpuSpan *ssl;
81
b03a4d3565c0 *** empty log message ***
gongo
parents: 79
diff changeset
255
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
256 //SpanPack send_pack[6][10] __attribute__((aligned(16)));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
257 SpanPack send_pack[SPE_NUM_MAX][MAX_SIZE_SPAN_PACK] __attribute__((aligned(16)));
94
588ab5f0e659 *** empty log message ***
gongo
parents: 92
diff changeset
258
99
57bac9e07662 rotate cube only polygon
gongo
parents: 94
diff changeset
259 void *__texture;
57bac9e07662 rotate cube only polygon
gongo
parents: 94
diff changeset
260
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
261 void
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
262 Viewer::run_init(char *xml)
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
263 {
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
264 HTaskPtr task;
54
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
265
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
266 start_time = get_ticks();
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
267 this_time = 0;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
268 frames = 0;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
269
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
270 pixelFormat = screen->format;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
271 background = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
272 //polygon = new Polygon;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
273 //polygon->set_data(xml);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
274 polygon = Polygon::createFromXMLfile(xml);
54
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
275 polygon->viewer = this;
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
276
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
277 // TaskManager 側で
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
278 // allocate API を作っておいた方がいい。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
279 // もしくは configure ?微妙か
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
280 //posix_memalign((void**)&sgp, 16, sizeof(SceneGraphPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
281 //posix_memalign((void**)&pp, 16, sizeof(PolygonPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
282 //posix_memalign((void**)&ssl, 16, sizeof(SpuSpan));
94
588ab5f0e659 *** empty log message ***
gongo
parents: 92
diff changeset
283 //sgp = new SceneGraphPack;
588ab5f0e659 *** empty log message ***
gongo
parents: 92
diff changeset
284 //pp = new PolygonPack;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
285 //ssl = new SpuSpan;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
286 MEMORY_ALLOCATION( &sgp, 16, sizeof(SceneGraphPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
287 MEMORY_ALLOCATION( &pp, 16, sizeof(PolygonPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
288 MEMORY_ALLOCATION( &ssl, 16, sizeof(SpuSpan));
88
504899860e66 *** empty log message ***
gongo
parents: 87
diff changeset
289 create_sgp(polygon, sgp);
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
290 sgp->ssl = ssl;
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
291
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
292 //pixels = new Uint32[width*height];
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
293 pixels = (Uint32*)fbdev_addr;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
294 //fbdev_addr = (Uint32)pixels;
99
57bac9e07662 rotate cube only polygon
gongo
parents: 94
diff changeset
295 //graph_line();
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
296
54
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
297 bitmap = SDL_CreateRGBSurfaceFrom((void *)pixels, width, height, 32,
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
298 width*4, redMask, greenMask,
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
299 blueMask, alphaMask);
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
300
105
3e331f7576a1 *** empty log message ***
gongo
parents: 102
diff changeset
301 task = manager->create_task(VIEWER_RUN_LOOP, 0, 0, 0, NULL);
63
54355e641172 *** empty log message ***
gongo
parents: 54
diff changeset
302 task->spawn();
99
57bac9e07662 rotate cube only polygon
gongo
parents: 94
diff changeset
303
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
304 //posix_memalign((void**)&__texture, 16, 128*128*3);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
305 //__texture = malloc(128*128*3);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
306 MEMORY_ALLOCATION( &__texture, 16, 128*128*3);
102
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
307 memcpy(__texture, polygon->texture_image->pixels, 128*128*3);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
308 HTaskPtr task_init_tex;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
309
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
310 for (int i = 0; i < spe_num; i++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
311 task_init_tex
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
312 = manager->create_task(TASK_INIT_TEXTURE, 0,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
313 (uint32)__texture, 0, NULL);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
314 //task_init_tex->set_cpu(CPU_SPE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
315 task_init_tex->set_cpu((CPU_TYPE)(i + SPE_0));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
316 task_init_tex->spawn();
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
317 }
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
318 }
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
319
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
320 void
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
321 Viewer::run_loop(void)
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
322 {
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
323 HTaskPtr task_update_sgp = NULL;
81
b03a4d3565c0 *** empty log message ***
gongo
parents: 79
diff changeset
324 HTaskPtr task_create_pp = NULL;
b03a4d3565c0 *** empty log message ***
gongo
parents: 79
diff changeset
325 HTaskPtr task_create_sp = NULL;
b03a4d3565c0 *** empty log message ***
gongo
parents: 79
diff changeset
326 HTaskPtr task_finish = NULL;
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
327
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
328 HTaskPtr task;
76
5a1a5f4c28fd *** empty log message ***
gongo
parents: 74
diff changeset
329 bool quit_flg;
5a1a5f4c28fd *** empty log message ***
gongo
parents: 74
diff changeset
330
5a1a5f4c28fd *** empty log message ***
gongo
parents: 74
diff changeset
331 quit_flg = quit_check();
5a1a5f4c28fd *** empty log message ***
gongo
parents: 74
diff changeset
332
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
333 SDL_BlitSurface(bitmap, NULL, screen, NULL);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
334 SDL_UpdateRect(screen, 0, 0, 0, 0);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
335
76
5a1a5f4c28fd *** empty log message ***
gongo
parents: 74
diff changeset
336 if (quit_flg == true) {
54
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
337 this_time = get_ticks();
105
3e331f7576a1 *** empty log message ***
gongo
parents: 102
diff changeset
338 task_finish = manager->create_task(VIEWER_RUN_FINISH, 0, 0, 0, NULL);
63
54355e641172 *** empty log message ***
gongo
parents: 54
diff changeset
339 task_finish->spawn();
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
340 return;
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
341 }
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
342
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
343 // clean_pixels や zRow_init は、
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
344 // spe で fb に draw する時は必要ない。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
345 // ppe 側で draw する時にだけ呼ぶべき。
102
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
346 //clean_pixels();
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
347 //zRow_init();
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
348
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
349 // これ自身、一つのタスクとして回す方がよいか
102
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
350 //graph_line();
106
c9efdb17e8d2 *** empty log message ***
gongo
parents: 105
diff changeset
351
81
b03a4d3565c0 *** empty log message ***
gongo
parents: 79
diff changeset
352 task_update_sgp
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
353 = manager->create_task(TASK_UPDATE_SGP, sizeof(SceneGraphPack),
88
504899860e66 *** empty log message ***
gongo
parents: 87
diff changeset
354 (uint32)sgp, (uint32)sgp, NULL);
504899860e66 *** empty log message ***
gongo
parents: 87
diff changeset
355 task_create_pp
105
3e331f7576a1 *** empty log message ***
gongo
parents: 102
diff changeset
356 = manager->create_task(TASK_CREATE_PP, sizeof(SceneGraphPack),
88
504899860e66 *** empty log message ***
gongo
parents: 87
diff changeset
357 (uint32)sgp, (uint32)pp, NULL);
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
358 task_create_sp
105
3e331f7576a1 *** empty log message ***
gongo
parents: 102
diff changeset
359 = manager->create_task(TASK_CREATE_SPAN, sizeof(PolygonPack),
92
663bc2a213f5 *** empty log message ***
gongo
parents: 89
diff changeset
360 (uint32)pp, 0, NULL);
88
504899860e66 *** empty log message ***
gongo
parents: 87
diff changeset
361
105
3e331f7576a1 *** empty log message ***
gongo
parents: 102
diff changeset
362 task = manager->create_task(VIEWER_RUN_DRAW, 0, 0, 0, NULL);
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
363
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
364 task->wait_for(task_update_sgp);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
365 task->wait_for(task_create_pp);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
366 task->wait_for(task_create_sp);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
367 task_create_sp->wait_for(task_create_pp);
85
9b96b190cb73 *** empty log message ***
gongo
parents: 81
diff changeset
368
74
5da437ae84db *** empty log message ***
gongo
parents: 73
diff changeset
369 //task_update_sgp->set_cpu(CPU_SPE);
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
370 //task_create_pp->set_cpu(CPU_SPE);
70
178459e03f5c *** empty log message ***
gongo
parents: 67
diff changeset
371
63
54355e641172 *** empty log message ***
gongo
parents: 54
diff changeset
372 task_update_sgp->spawn();
54355e641172 *** empty log message ***
gongo
parents: 54
diff changeset
373 task_create_pp->spawn();
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
374 task_create_sp->spawn();
63
54355e641172 *** empty log message ***
gongo
parents: 54
diff changeset
375 task->spawn();
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
376 }
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
377
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
378 /**
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
379 * 本当はタスクとして TestDraw を選ぶ
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
380 */
101
c31499d11926 *** empty log message ***
gongo
parents: 99
diff changeset
381 //#define DRAW_POLYGON
c31499d11926 *** empty log message ***
gongo
parents: 99
diff changeset
382 #define DRAW_SPANPACK
94
588ab5f0e659 *** empty log message ***
gongo
parents: 92
diff changeset
383 //#define DRAW_SPUSPAN
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
384 void
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
385 Viewer::run_draw(void)
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
386 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
387 HTaskPtr task_loop;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
388 HTaskPtr task_draw;
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
389
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
390 task_loop = manager->create_task(VIEWER_RUN_LOOP, 0, 0, 0, NULL);
94
588ab5f0e659 *** empty log message ***
gongo
parents: 92
diff changeset
391
102
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
392 #if 1
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
393 for (int j = 0; j < SPE_NUM_MAX; j++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
394 for (int i = 0; i < MAX_SIZE_SPAN_PACK; i++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
395 if (ssl->list[j].packs[i].info.size == 0) continue;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
396 // memcpy はもちろんだめ。だけど。。。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
397 // SPUSPAN->ss は配列で、各要素がアライメントとれてないと駄目。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
398 #if 1
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
399 memcpy(&send_pack[j][i], &ssl->list[j].packs[i], sizeof(SpanPack));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
400 task_draw
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
401 = manager->create_task(TASK_DRAW, sizeof(SpanPack),
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
402 (uint32)&send_pack[j][i], fbdev_addr, NULL);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
403 #else
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
404 task_draw
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
405 = manager->create_task(TASK_DRAW, sizeof(SpanPack),
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
406 (uint32)&ssl->list[j].packs[i],
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
407 fbdev_addr, NULL);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
408 #endif
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
409 //task_draw->set_cpu(CPU_SPE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
410 // もう少し良い選び方があってもいいはずだ
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
411 // てか ANY にすればいいんじゃね
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
412 task_draw->set_cpu((CPU_TYPE)(((i+j)%spe_num) + SPE_0));
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
413 //task_draw->set_cpu(CPU_PPE);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
414 task_loop->wait_for(task_draw);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
415 task_draw->spawn();
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
416 }
94
588ab5f0e659 *** empty log message ***
gongo
parents: 92
diff changeset
417 }
99
57bac9e07662 rotate cube only polygon
gongo
parents: 94
diff changeset
418 #endif
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
419 task_loop->spawn();
102
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
420 frames++;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
421
102
62679f4cae18 tag:first_render_with_spe fix
gongo
parents: 101
diff changeset
422 return;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
423
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
424 #ifdef DRAW_POLYGON
101
c31499d11926 *** empty log message ***
gongo
parents: 99
diff changeset
425 //polygon->draw(pp); // test draw of PolygonPack
c31499d11926 *** empty log message ***
gongo
parents: 99
diff changeset
426 polygon->draw(sgp); // test draw of PolygonPack
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
427 #else
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
428 # ifdef DRAW_SPANPACK // test draw of SpanPack
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
429 for (int j = 0; j < SPE_NUM_MAX; j++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
430 for (int i = 0; i < MAX_SIZE_SPAN_PACK; i++) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
431 if (ssl->list[j].packs[i].info.size < 1) continue;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
432 polygon->draw(&ssl->list[j].packs[i]);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 106
diff changeset
433 }
89
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
434 }
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
435 # else
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
436 polygon->draw(&ssl->ss[0]);
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
437 polygon->draw(&ssl->ss[1]);
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
438 polygon->draw(&ssl->ss[2]);
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
439 polygon->draw(&ssl->ss[3]);
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
440 polygon->draw(&ssl->ss[4]);
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
441 polygon->draw(&ssl->ss[5]);
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
442 # endif
a309cf4eafc5 *** empty log message ***
gongo
parents: 88
diff changeset
443 #endif
99
57bac9e07662 rotate cube only polygon
gongo
parents: 94
diff changeset
444
101
c31499d11926 *** empty log message ***
gongo
parents: 99
diff changeset
445 SDL_BlitSurface(bitmap, NULL, screen, NULL);
c31499d11926 *** empty log message ***
gongo
parents: 99
diff changeset
446 SDL_UpdateRect(screen, 0, 0, 0, 0);
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
447 }
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
448
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
449 void
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
450 Viewer::run_finish(void)
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
451 {
54
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
452 if (this_time != start_time) {
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
453 cout<< (((float)frames)/(this_time-start_time))*1000.0 << " FPS\n";
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
454 }
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
455
54
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
456 SDL_FreeSurface(bitmap);
106
c9efdb17e8d2 *** empty log message ***
gongo
parents: 105
diff changeset
457 //delete [] pixels;
54
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
458 polygon->delete_data();
90523ccc4dff *** empty log message ***
gongo
parents: 51
diff changeset
459 delete polygon;
99
57bac9e07662 rotate cube only polygon
gongo
parents: 94
diff changeset
460
57bac9e07662 rotate cube only polygon
gongo
parents: 94
diff changeset
461 free(__texture);
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
462 quit();
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
463 }
aa11038dbdc1 *** empty log message ***
gongo
parents: 38
diff changeset
464
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
465 void
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
466 Viewer::zRow_init()
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
467 {
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
468 for (int i = 0; i < width; i++) {
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
469 for (int j = 0; j < height; j++) {
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
470 zRow[i][j] = 65535;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
471 }
28
243ee0a1fe6f *** empty log message ***
gongo
parents: 26
diff changeset
472 }
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
473 }