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) {