comparison Renderer/Engine/spe/CreatePolygonFromSceneGraph.cc @ 1026:55f3c5976959

create_pp_task fix.
author tkaito
date Tue, 09 Nov 2010 18:14:28 +0900
parents 736a833db108
children
comparison
equal deleted inserted replaced
1020:360f8eba78f1 1026:55f3c5976959
60 float *coord_tex = (float*)smanager->get_input(rbuf, 1); 60 float *coord_tex = (float*)smanager->get_input(rbuf, 1);
61 float *normal = (float*)smanager->get_input(rbuf, 2); 61 float *normal = (float*)smanager->get_input(rbuf, 2);
62 float *matrix = (float*)smanager->get_input(rbuf, 3); 62 float *matrix = (float*)smanager->get_input(rbuf, 3);
63 float *real_matrix = (float*)smanager->get_input(rbuf, 4); 63 float *real_matrix = (float*)smanager->get_input(rbuf, 4);
64 uint32 *pixels = (uint32*)smanager->get_input(rbuf, 5); 64 uint32 *pixels = (uint32*)smanager->get_input(rbuf, 5);
65 //TrianglePackPtr triangle = (TrianglePackPtr)smanager->get_input(rbuf, 6);
66 65
67 int sg_size = (int)smanager->get_param(0); 66 int sg_size = (int)smanager->get_param(0);
68 int width = (int)smanager->get_param(1); 67 int width = (int)smanager->get_param(1);
69 int height = (int)smanager->get_param(2); 68 int height = (int)smanager->get_param(2);
70 int scale_max = (int)smanager->get_param(3); 69 int scale_max = (int)smanager->get_param(3);
71 70
72 // triangle を書き戻す 71 // triangle を書き戻す
73 TrianglePackPtr triangle = (TrianglePackPtr)smanager->get_output(wbuf, 0); 72 //TrianglePackPtr triangle = (TrianglePackPtr)smanager->get_output(wbuf, 0);
73
74 PolygonPackPtr pp
75 = (PolygonPackPtr)smanager->allocate(sizeof(PolygonPack));
76 PolygonPackPtr send_pp
77 = (PolygonPackPtr)smanager->allocate(sizeof(PolygonPack));
78 PolygonPackPtr pp_addr = (PolygonPackPtr)smanager->get_param(1);
79 PolygonPackPtr tmp_pp;
80
74 81
75 for (int i = 0; i < sg_size; i += 3) { 82 for (int i = 0; i < sg_size; i += 3) {
83 if (pp->info.size >= MAX_SIZE_TRIANGLE) {
84 PolygonPackPtr next;
85
86 smanager->mainMem_alloc(0, sizeof(PolygonPack));
87 smanager->mainMem_wait();
88 next = (PolygonPackPtr)smanager->mainMem_get(0);
89
90 pp->next = next;
91
92 tmp_pp = pp;
93 pp = send_pp;
94 send_pp = tmp_pp;
95
96 smanager->dma_wait(PP_STORE);
97 smanager->dma_store(send_pp, (memaddr)pp_addr,
98 sizeof(PolygonPack), PP_STORE);
99
100 pp_addr = next;
101
102 smanager->dma_wait(PP_LOAD);
103 smanager->dma_load(pp, (memaddr)pp_addr,
104 sizeof(PolygonPack), PP_LOAD);
105 smanager->dma_wait(PP_LOAD);
106 pp->init();
107 }
76 108
77 xyz1[0] = coord_xyz[(i+0)*3]; 109 xyz1[0] = coord_xyz[(i+0)*3];
78 xyz1[1] = coord_xyz[(i+0)*3+1]; 110 xyz1[1] = coord_xyz[(i+0)*3+1];
79 xyz1[2] = coord_xyz[(i+0)*3+2]*-1.0f; 111 xyz1[2] = coord_xyz[(i+0)*3+2]*-1.0f;
80 xyz1[3] = 1.0f; 112 xyz1[3] = 1.0f;
99 xyz2[0] /= xyz2[2]; 131 xyz2[0] /= xyz2[2];
100 xyz2[1] /= xyz2[2]; 132 xyz2[1] /= xyz2[2];
101 xyz3[0] /= xyz3[2]; 133 xyz3[0] /= xyz3[2];
102 xyz3[1] /= xyz3[2]; 134 xyz3[1] /= xyz3[2];
103 135
136 TrianglePack *triangle = &pp->tri[pp->info.size++];
137
104 triangle->ver1.x = xyz1[0]; 138 triangle->ver1.x = xyz1[0];
105 triangle->ver1.y = xyz1[1]; 139 triangle->ver1.y = xyz1[1];
106 triangle->ver1.z = xyz1[2]; 140 triangle->ver1.z = xyz1[2];
107 triangle->ver1.tex_x = coord_tex[(i+0)*3]; 141 triangle->ver1.tex_x = coord_tex[(i+0)*3];
108 triangle->ver1.tex_y = coord_tex[(i+0)*3+1]; 142 triangle->ver1.tex_y = coord_tex[(i+0)*3+1];
165 triangle->tex_info.addr = pixels; 199 triangle->tex_info.addr = pixels;
166 triangle->tex_info.width = width; 200 triangle->tex_info.width = width;
167 triangle->tex_info.height = height; 201 triangle->tex_info.height = height;
168 triangle->tex_info.scale_max = scale_max; 202 triangle->tex_info.scale_max = scale_max;
169 } 203 }
204 smanager->dma_wait(PP_STORE);
205 smanager->dma_store(pp, (memaddr)pp_addr,
206 sizeof(PolygonPack), PP_STORE);
207 smanager->dma_wait(PP_STORE);
208
209 free(pp);
210 free(send_pp);
211
170 return 0; 212 return 0;
171 } 213 }