Mercurial > hg > Game > Cerium
diff TaskManager/Test/test_render/task/CreatePolygonFromSceneGraph.cpp @ 202:76bf19f9e305 draft
fix SceneGraphIterator::hasNext(), next()
add variable SceneGraph::sgid, flag_drawbale
author | gongo@gendarme.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Mon, 26 Jan 2009 16:58:35 +0900 |
parents | efd7e4712342 |
children | 1eba8570808c |
line wrap: on
line diff
--- a/TaskManager/Test/test_render/task/CreatePolygonFromSceneGraph.cpp Mon Jan 26 16:46:59 2009 +0900 +++ b/TaskManager/Test/test_render/task/CreatePolygonFromSceneGraph.cpp Mon Jan 26 16:58:35 2009 +0900 @@ -89,81 +89,82 @@ send_pp->init(); while (sg) { - for (int i = 0; i < sg->size; i += 3) { - if (pp->info.size >= MAX_SIZE_TRIANGLE) { - PolygonPackPtr next; + if (sg->flag_drawable) { // sg->isDrawable() とかの方がよくね? + for (int i = 0; i < sg->size; i += 3) { + if (pp->info.size >= MAX_SIZE_TRIANGLE) { + PolygonPackPtr next; - smanager->mainMem_alloc(0, sizeof(PolygonPack)); - smanager->mainMem_wait(); - next = (PolygonPackPtr)smanager->mainMem_get(0); + smanager->mainMem_alloc(0, sizeof(PolygonPack)); + smanager->mainMem_wait(); + next = (PolygonPackPtr)smanager->mainMem_get(0); - pp->next = next; + pp->next = next; - tmp_pp = pp; - pp = send_pp; - send_pp = tmp_pp; + tmp_pp = pp; + pp = send_pp; + send_pp = tmp_pp; - smanager->dma_wait(PP_STORE); - smanager->dma_store(send_pp, (uint32)pp_addr, - sizeof(PolygonPack), PP_STORE); + smanager->dma_wait(PP_STORE); + smanager->dma_store(send_pp, (uint32)pp_addr, + sizeof(PolygonPack), PP_STORE); - pp_addr = next; + pp_addr = next; - smanager->dma_wait(PP_LOAD); - smanager->dma_load(pp, (uint32)pp_addr, - sizeof(PolygonPack), PP_LOAD); - smanager->dma_wait(PP_LOAD); - pp->init(); - } + smanager->dma_wait(PP_LOAD); + smanager->dma_load(pp, (uint32)pp_addr, + sizeof(PolygonPack), PP_LOAD); + smanager->dma_wait(PP_LOAD); + pp->init(); + } - TrianglePack *triangle = &pp->tri[pp->info.size++]; + TrianglePack *triangle = &pp->tri[pp->info.size++]; - xyz1[0] = sg->data[(i+0)*3]; - xyz1[1] = sg->data[(i+0)*3+1]; - xyz1[2] = sg->data[(i+0)*3+2]*-1; - xyz1[3] = 1; - xyz2[0] = sg->data[(i+1)*3]; - xyz2[1] = sg->data[(i+1)*3+1]; - xyz2[2] = sg->data[(i+1)*3+2]*-1; - xyz2[3] = 1; - xyz3[0] = sg->data[(i+2)*3]; - xyz3[1] = sg->data[(i+2)*3+1]; - xyz3[2] = sg->data[(i+2)*3+2]*-1; - xyz3[3] = 1; + xyz1[0] = sg->data[(i+0)*3]; + xyz1[1] = sg->data[(i+0)*3+1]; + xyz1[2] = sg->data[(i+0)*3+2]*-1; + xyz1[3] = 1; + xyz2[0] = sg->data[(i+1)*3]; + xyz2[1] = sg->data[(i+1)*3+1]; + xyz2[2] = sg->data[(i+1)*3+2]*-1; + xyz2[3] = 1; + xyz3[0] = sg->data[(i+2)*3]; + xyz3[1] = sg->data[(i+2)*3+1]; + xyz3[2] = sg->data[(i+2)*3+2]*-1; + xyz3[3] = 1; - rotate(xyz1, sg->matrix); - rotate(xyz2, sg->matrix); - rotate(xyz3, sg->matrix); + rotate(xyz1, sg->matrix); + rotate(xyz2, sg->matrix); + rotate(xyz3, sg->matrix); - apply_matrix(xyz1, mat); - apply_matrix(xyz2, mat); - apply_matrix(xyz3, mat); + apply_matrix(xyz1, mat); + apply_matrix(xyz2, mat); + apply_matrix(xyz3, mat); - triangle->ver1.x = xyz1[0]; - triangle->ver1.y = xyz1[1]; - triangle->ver1.z = xyz1[2]; - triangle->ver1.tex_x = sg->data[(i+0)*3 + sg->size*6]; - triangle->ver1.tex_y = sg->data[(i+0)*3 + sg->size*6+1]; + triangle->ver1.x = xyz1[0]; + triangle->ver1.y = xyz1[1]; + triangle->ver1.z = xyz1[2]; + triangle->ver1.tex_x = sg->data[(i+0)*3 + sg->size*6]; + triangle->ver1.tex_y = sg->data[(i+0)*3 + sg->size*6+1]; - triangle->ver2.x = xyz2[0]; - triangle->ver2.y = xyz2[1]; - triangle->ver2.z = xyz2[2]; - triangle->ver2.tex_x = sg->data[(i+1)*3 + sg->size*6]; - triangle->ver2.tex_y = sg->data[(i+1)*3 + sg->size*6+1]; + triangle->ver2.x = xyz2[0]; + triangle->ver2.y = xyz2[1]; + triangle->ver2.z = xyz2[2]; + triangle->ver2.tex_x = sg->data[(i+1)*3 + sg->size*6]; + triangle->ver2.tex_y = sg->data[(i+1)*3 + sg->size*6+1]; - triangle->ver3.x = xyz3[0]; - triangle->ver3.y = xyz3[1]; - triangle->ver3.z = xyz3[2]; - triangle->ver3.tex_x = sg->data[(i+2)*3 + sg->size*6]; - triangle->ver3.tex_y = sg->data[(i+2)*3 + sg->size*6+1]; + triangle->ver3.x = xyz3[0]; + triangle->ver3.y = xyz3[1]; + triangle->ver3.z = xyz3[2]; + triangle->ver3.tex_x = sg->data[(i+2)*3 + sg->size*6]; + triangle->ver3.tex_y = sg->data[(i+2)*3 + sg->size*6+1]; - triangle->tex_info.addr = sg->texture_info.pixels; - triangle->tex_info.width = sg->texture_info.t_w; - triangle->tex_info.height = sg->texture_info.t_h; - triangle->tex_info.scale_max = sg->texture_info.scale_max; + triangle->tex_info.addr = sg->texture_info.pixels; + triangle->tex_info.width = sg->texture_info.t_w; + triangle->tex_info.height = sg->texture_info.t_h; + triangle->tex_info.scale_max = sg->texture_info.scale_max; + } } - if (sg->children != NULL) { sg = sg->children; } else if (sg->brother != NULL) {