Mercurial > hg > Members > kono > Cerium
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 } |