diff TaskManager/Test/test_render/task/CreateSpan.cpp @ 154:f4673e790675

task/ と spe/ の同期し忘れ。 こういうのめんどくさいからなんとかしたいんだけど
author gongo@gendarme.local
date Wed, 03 Dec 2008 20:14:23 +0900
parents 9642aeef298d
children 77dac07efd79
line wrap: on
line diff
--- a/TaskManager/Test/test_render/task/CreateSpan.cpp	Tue Dec 02 19:39:36 2008 +0900
+++ b/TaskManager/Test/test_render/task/CreateSpan.cpp	Wed Dec 03 20:14:23 2008 +0900
@@ -122,10 +122,12 @@
 
 	tile->tix = tex_xpos;
 	tile->tiy = tex_ypos;
+	tile->tile = span->tex_addr;
+	tile->padding = 1;
     } else {    
-	while (cur_x < span->length_x) {
-	    if (cur_x + MAX_TILE_LIST < span->length_x) {
-		len = MAX_TILE_LIST;
+	while (cur_x <= span->length_x) {
+	    if (cur_x + MAX_TILE_LIST - 1 < span->length_x) {
+		len = MAX_TILE_LIST - 1;
 		smanager->mainMem_alloc(TILE_ALLOCATE, sizeof(TileInfoList));
 	    } else {
 		len = span->length_x - cur_x;
@@ -135,21 +137,28 @@
 
 	    tilelist->init();
 
-	    for (int i = cur_x; i < cur_x + len; i++) {
-		tile = &tilelist->tileinfo[tilelist->size++];
-
+	    for (int i = cur_x; i <= cur_x + len; i++) {
 		tex_x = tex1*(end-1-i)/(end-1) + tex2*i/(end-1);
 		tex_y = tey1*(end-1-i)/(end-1) + tey2*i/(end-1);
 		if (tex_x > 1) tex_x = 1;
 		if (tex_y > 1) tex_y = 1;
-		tex_xpos = (int)((span->tex_height-1) * tex_x);
-		tex_ypos = (int)((span->tex_width-1) * tex_y);
+		tex_xpos = (int)((span->tex_width-1) * tex_x);
+		tex_ypos = (int)((span->tex_height-1) * tex_y);
 
+		tile = &tilelist->tileinfo[tilelist->size++];
 		tile->tix = tex_xpos;
 		tile->tiy = tex_ypos;
+		tile->padding = i;
+
+		int blockX = tex_xpos / TEXTURE_SPLIT_PIXEL;
+		int blockY = tex_ypos / TEXTURE_SPLIT_PIXEL;
+		int block = blockX + (span->tex_width/TEXTURE_SPLIT_PIXEL)*blockY;
+		uint32 *addr = (uint32*)span->tex_addr;
+		tile->tile = (void*)(addr + block*64);
+		//tile->tile = span->tex_addr;
 	    }
 	
-	    if (cur_x + MAX_TILE_LIST < span->length_x) {
+	    if (cur_x + MAX_TILE_LIST - 1 < span->length_x) {
 		TileInfoListPtr tmp = tilelist;
 		tilelist = send_tilelist;
 		send_tilelist = tmp;
@@ -165,8 +174,6 @@
 		smanager->dma_wait(TILE_STORE);
 		smanager->dma_store(send_tilelist, (uint32)send_tilelist_addr,
 				    sizeof(TileInfoList), TILE_STORE);
-
-		tilelist->init();
 	    }
 	    
 	    cur_x += MAX_TILE_LIST;