# HG changeset patch # User gongo@localhost.localdomain # Date 1228721822 -32400 # Node ID 1f4c3f3238e6278fa3c73594e027036a1404ec34 # Parent d5cca23ed50cf4c64699c585ef355a44a5547f1f texture の座標がマイナスになったあと、それを 0 にし忘れてた diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Cell/SpeThreads.cc --- a/TaskManager/Cell/SpeThreads.cc Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Cell/SpeThreads.cc Mon Dec 08 16:37:02 2008 +0900 @@ -132,8 +132,9 @@ * * ʤ٤ NONBLOCKING ʤɡ * Inbound Mailbox 塼˶ʤǤʤΤ - * Ƥ뤫ǧƤ롣̵Ԥġ - * BLOCKING ꤿΰ busy_wait Ȥפäꡣ + * Ƥ뤫ǧƤ롣̵Ԥġ + * + * ԤĤʡ ALL_BLOCKING äƼ¤ busy wait äꤹ뤷 * * @param [speid] SPE ID * @param [data] Send 32-bit mailbox messages diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/Makefile --- a/TaskManager/Test/test_render/Makefile Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/Makefile Mon Dec 08 16:37:02 2008 +0900 @@ -15,9 +15,13 @@ macosx-depend: FORCE @$(MAKE) -f Makefile.macosx depend +ps3-depend: FORCE + @$(MAKE) -f Makefile.ps3 depend + FORCE: clean: @$(MAKE) -f Makefile.macosx clean @$(MAKE) -f Makefile.ps3 clean @$(MAKE) -f Makefile.linux clean + diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/Makefile.def --- a/TaskManager/Test/test_render/Makefile.def Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/Makefile.def Mon Dec 08 16:37:02 2008 +0900 @@ -11,7 +11,7 @@ #CERIUM = ../../.. CC = g++ -CFLAGS = -O9 -g -Wall# -DDEBUG +CFLAGS = -O0 -g -Wall# -DDEBUG INCLUDE = -I$(CERIUM)/include/TaskManager -I. LIBS = -L$(CERIUM)/TaskManager \ No newline at end of file diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/SceneGraph.cpp --- a/TaskManager/Test/test_render/SceneGraph.cpp Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/SceneGraph.cpp Mon Dec 08 16:37:02 2008 +0900 @@ -353,6 +353,8 @@ texture_info.pixels_orig = (Uint32*)texture_image->pixels; texture_info.pixels = tex_dest; + printf("[%s] %p\n", filename, tex_dest); + if(unlink(image_name)) { cout << "unlink error\n"; diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/Span.h --- a/TaskManager/Test/test_render/Span.h Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/Span.h Mon Dec 08 16:37:02 2008 +0900 @@ -5,12 +5,12 @@ # include "Tapestry.h" #endif -#define MAX_TILE_LIST 30 +#define MAX_TILE_LIST 64 typedef struct tile { void *tile; int tix, tiy; - int padding; // 16バイト倍数にする用 + //int padding; // 16バイト倍数にする用 } TileInfo, *TileInfoPtr; typedef struct tile_list { @@ -23,7 +23,7 @@ size = 0; next = 0; } -} TileInfoList, *TileInfoListPtr; // 4*4+63*sizeof(Tile) = 1008+16 +} TileInfoList, *TileInfoListPtr; // 4*4+64*sizeof(Tile) = 16+768 class Span { public: diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/spe/CreateSpan.cpp --- a/TaskManager/Test/test_render/spe/CreateSpan.cpp Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/spe/CreateSpan.cpp Mon Dec 08 16:37:02 2008 +0900 @@ -83,27 +83,73 @@ } /** - * テクスチャの座標 (pos1, pos2) を - * TEXTURE_SPLIT_PIXEL x TEXTURE_SPLIT_PIXEL の中に入るように変換 + * テクスチャは、TEXTURE_SPLIT_PIXEL^2 のブロックに分割する * - * 例: - * (450, 318) -> 分割されたブロックの (2, 6) になる + * +---+---+---+---+---+---+ + * | 0 | 1 | 2 | 3 | 4 | 5 | + * +---+---+---+---+---+---+ + * | | | | | |11 | + * +---+---+---+---+---+---+ + * | | | | | |17 | + * +---+---+---+---+---+---+ + * | | | | | |23 | + * +---+---+---+---+---+---+ + * | | | | | |29 | + * +---+---+---+---+---+---+ + * | | | | | |35 | + * +---+---+---+---+---+---+ + * + * 一辺を TEXTURE_SPLIT とする + * 各ブロックの数字がブロックIDとなる。 + */ + +/** + * テクスチャの座標から、 + * テクスチャのどのブロックかを求める + * + * @param[in] tx X coordinates of texture + * @param[in] tx Y coordinates of texture + * @param[in] twidth Width of texture + * @return block ID */ static int -get_tex_pos(int pos, int screen) +get_tex_block(int tx, int ty, int twidth) +{ + int blockX, blockY; + + blockX = tx / TEXTURE_SPLIT_PIXEL; + blockY = ty / TEXTURE_SPLIT_PIXEL; + + return blockX + (twidth/TEXTURE_SPLIT_PIXEL)*blockY; +} + +void +CreateSpan::setTileInfo(TileInfoPtr tile, int xpos, int ypos, + int tex_width, uint32* tex_addr_top) { - if (pos < 0) pos = 0; - if (screen - 1 < pos) pos = screen - 1 ; - - return pos % TEXTURE_SPLIT_PIXEL; + /* + * テクスチャの座標 (tex_xpos, tex_ypos) の + * 分割したブロック内での座標 + * 例: + * (450, 318) -> 分割されたブロックの (2, 6) になる + */ + tile->tix = xpos % TEXTURE_SPLIT_PIXEL; + tile->tiy = ypos % TEXTURE_SPLIT_PIXEL; + + /** + * ブロックIDから、あらかじめ分割したテクスチャの + * 先頭addressの addr からの距離を求める。 + * それがこの 1 pixel が使うテクスチャのブロックになる + */ + int block = get_tex_block(xpos, ypos, tex_width); + tile->tile = (void*)(tex_addr_top + block*TEXTURE_BLOCK_SIZE); } /** * Span の1ドットずつ、必要なテクスチャのブロック(Tile)を求めていく - * */ void -CreateSpan::setTile(SpanPtr span) +CreateSpan::setTileInfoList(SpanPtr span) { TileInfoListPtr tilelist = (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList)); @@ -130,14 +176,13 @@ if (span->length_x == 1) { tilelist->init(); - tile = &tilelist->tileinfo[tilelist->size++]; tex_xpos = (int)((span->tex_width-1) * tex1); tex_ypos = (int)((span->tex_height-1) * tey1); - tile->tix = get_tex_pos(tex_xpos, span->tex_width); - tile->tiy = get_tex_pos(tex_ypos, span->tex_height); - tile->tile = span->tex_addr; + tile = &tilelist->tileinfo[tilelist->size++]; + setTileInfo(tile, tex_xpos, tex_ypos, span->tex_width, + (uint32*)span->tex_addr); } else { while (cur_x <= span->length_x) { if (cur_x + MAX_TILE_LIST - 1 < span->length_x) { @@ -159,16 +204,22 @@ 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 = get_tex_pos(tex_xpos, span->tex_width); - tile->tiy = get_tex_pos(tex_ypos, span->tex_height); + /** + * 座標が [0..MAX-1] を超えない様に + * なんかもっと良い書き方ありそうだけど + */ + if (tex_xpos < 0) tex_xpos = 0; + if (span->tex_width - 1 < tex_xpos) { + tex_xpos = span->tex_width - 1; + } + if (tex_ypos < 0) tex_ypos = 0; + if (span->tex_height - 1 < tex_ypos) { + tex_ypos = span->tex_height - 1; + } - 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 = &tilelist->tileinfo[tilelist->size++]; + setTileInfo(tile, tex_xpos, tex_ypos, span->tex_width, + (uint32*)span->tex_addr); } if (cur_x + MAX_TILE_LIST - 1 < span->length_x) { @@ -410,9 +461,7 @@ // TilePtr の計算 // tix, tiy (Tile 内での x, y) - // - //smanager->mainMem_wait(); - setTile(span); + setTileInfoList(span); } } diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/spe/CreateSpan.h --- a/TaskManager/Test/test_render/spe/CreateSpan.h Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/spe/CreateSpan.h Mon Dec 08 16:37:02 2008 +0900 @@ -22,7 +22,9 @@ int charge_y_top, int charge_y_end, long *tex_addr, long tex_width, long tex_height, VertexPack *vMin,VertexPack *vMid,VertexPack *vMid1); - void setTile(SpanPtr span); + void setTileInfoList(SpanPtr span); + void setTileInfo(TileInfoPtr tile, int xpos, int ypos, + int tex_width, uint32* tex_addr_top); }; #endif diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/spe/DrawSpan.cpp --- a/TaskManager/Test/test_render/spe/DrawSpan.cpp Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/spe/DrawSpan.cpp Mon Dec 08 16:37:02 2008 +0900 @@ -14,7 +14,7 @@ static const int hashsize = 263; -static TilePtr hash_table[hashsize] = {NULL}; +static TilePtr hash_table[hashsize] = {0}; unsigned short PRIME[8] = { 0x002, 0x065, 0x0c7, 0x133, 0x191, 0x1f3, 0x259, 0x2bd, @@ -123,7 +123,7 @@ tile->texture_addr = addr; smanager->dma_load(tile->pixel, (uint32)addr, - sizeof(uint32)*64, TEX_LOAD); + sizeof(uint32)*TEXTURE_BLOCK_SIZE, TEX_LOAD); int index = put(tile->texture_addr, tile); @@ -167,15 +167,11 @@ (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList)); TileInfoListPtr next_tilist = (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList)); - TileInfoPtr tinfo; - tileList = (TileListPtr)smanager->allocate(sizeof(TileList)); tileList->init(); - int render_y = sp->info.y_top; - void *texture_image = global_get(TEXTURE_ID); - + void *texture_image = global_get(TEXTURE_ID); int rangex_start = get_param(0); // Υô x ϰϤλ int rangex_end = get_param(1); // (start <= x <= end) int rangey = get_param(2); // y ϰ (render_y + rangey - 1) @@ -212,10 +208,6 @@ sizeof(TileInfoList), TILE_INFO_LOAD); Uint32 rgb = 0x00ff00; - float tex1 = span->tex_x1; - float tex2 = span->tex_x2; - float tey1 = span->tex_y1; - float tey2 = span->tex_y2; int tex_xpos; int tex_ypos; int tex_zpos; @@ -236,15 +228,10 @@ continue; } -#if 1 tex_xpos = tilist->tileinfo[0].tix; tex_ypos = tilist->tileinfo[0].tiy; + tex_zpos = (int)z; texture_image = tilist->tileinfo[0].tile; -#else - tex_xpos = (int)((span->tex_width-1) * tex1); - tex_ypos = (int)((span->tex_height-1) * tey1); - tex_zpos = (int)z; -#endif if (zpos < zRow[localx + (rangex * localy)]) { rgb = get_rgb(tex_xpos, tex_ypos, texture_image); @@ -301,25 +288,16 @@ len = max_x - cur_x; } - float tex_x, tex_y, tex_z; - for (int j = cur_x; j <= cur_x + len; j++) { TileInfoPtr tinfo = &tilist->tileinfo[j%MAX_TILE_LIST]; + float tex_z + = z*(x_len-1-j)/(x_len-1) + zpos*j/(x_len-1); + localx = getLocalX(x-1+j); - tex_z = z*(x_len-1-j)/(x_len-1) + zpos*j/(x_len-1); -#if 1 tex_xpos = tinfo->tix; tex_ypos = tinfo->tiy; texture_image = tinfo->tile; -#else - tex_x = tex1*(x_len-1-j)/(x_len-1) + tex2*j/(x_len-1); - tex_y = tey1*(x_len-1-j)/(x_len-1) + tey2*j/(x_len-1); - if (tex_x > 1) tex_x = 1; - if (tex_y > 1) tex_y = 1; - tex_xpos = (int)((span->tex_width-1) * tex_x); - tex_ypos = (int)((span->tex_height-1) * tex_y); -#endif if (tex_z < zRow[localx + (rangex*localy)]) { rgb = get_rgb(tex_xpos, tex_ypos, texture_image); diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/spe/Makefile --- a/TaskManager/Test/test_render/spe/Makefile Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/spe/Makefile Mon Dec 08 16:37:02 2008 +0900 @@ -8,7 +8,7 @@ OBJS = $(SRCS:.cpp=.o) CC = spu-g++ -CFLAGS = -O9 -g -fno-exceptions -fno-rtti #-DDEBUG +CFLAGS = -O9 -Wall -g -fno-exceptions -fno-rtti #-DDEBUG INCLUDE = -I$(CERIUM)/include/TaskManager -I. -I.. LIBS = -L$(CERIUM)/TaskManager -lspemanager diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/task/CreateSpan.cpp --- a/TaskManager/Test/test_render/task/CreateSpan.cpp Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/task/CreateSpan.cpp Mon Dec 08 16:37:02 2008 +0900 @@ -83,27 +83,73 @@ } /** - * テクスチャの座標 (pos1, pos2) を - * TEXTURE_SPLIT_PIXEL x TEXTURE_SPLIT_PIXEL の中に入るように変換 + * テクスチャは、TEXTURE_SPLIT_PIXEL^2 のブロックに分割する * - * 例: - * (450, 318) -> 分割されたブロックの (2, 6) になる + * +---+---+---+---+---+---+ + * | 0 | 1 | 2 | 3 | 4 | 5 | + * +---+---+---+---+---+---+ + * | | | | | |11 | + * +---+---+---+---+---+---+ + * | | | | | |17 | + * +---+---+---+---+---+---+ + * | | | | | |23 | + * +---+---+---+---+---+---+ + * | | | | | |29 | + * +---+---+---+---+---+---+ + * | | | | | |35 | + * +---+---+---+---+---+---+ + * + * 一辺を TEXTURE_SPLIT とする + * 各ブロックの数字がブロックIDとなる。 + */ + +/** + * テクスチャの座標から、 + * テクスチャのどのブロックかを求める + * + * @param[in] tx X coordinates of texture + * @param[in] tx Y coordinates of texture + * @param[in] twidth Width of texture + * @return block ID */ static int -get_tex_pos(int pos, int screen) +get_tex_block(int tx, int ty, int twidth) +{ + int blockX, blockY; + + blockX = tx / TEXTURE_SPLIT_PIXEL; + blockY = ty / TEXTURE_SPLIT_PIXEL; + + return blockX + (twidth/TEXTURE_SPLIT_PIXEL)*blockY; +} + +void +CreateSpan::setTileInfo(TileInfoPtr tile, int xpos, int ypos, + int tex_width, uint32* tex_addr_top) { - if (pos < 0) pos = 0; - if (screen - 1 < pos) pos = screen - 1 ; - - return pos % TEXTURE_SPLIT_PIXEL; + /* + * テクスチャの座標 (tex_xpos, tex_ypos) の + * 分割したブロック内での座標 + * 例: + * (450, 318) -> 分割されたブロックの (2, 6) になる + */ + tile->tix = xpos % TEXTURE_SPLIT_PIXEL; + tile->tiy = ypos % TEXTURE_SPLIT_PIXEL; + + /** + * ブロックIDから、あらかじめ分割したテクスチャの + * 先頭addressの addr からの距離を求める。 + * それがこの 1 pixel が使うテクスチャのブロックになる + */ + int block = get_tex_block(xpos, ypos, tex_width); + tile->tile = (void*)(tex_addr_top + block*TEXTURE_BLOCK_SIZE); } /** * Span の1ドットずつ、必要なテクスチャのブロック(Tile)を求めていく - * */ void -CreateSpan::setTile(SpanPtr span) +CreateSpan::setTileInfoList(SpanPtr span) { TileInfoListPtr tilelist = (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList)); @@ -130,14 +176,13 @@ if (span->length_x == 1) { tilelist->init(); - tile = &tilelist->tileinfo[tilelist->size++]; tex_xpos = (int)((span->tex_width-1) * tex1); tex_ypos = (int)((span->tex_height-1) * tey1); - tile->tix = get_tex_pos(tex_xpos, span->tex_width); - tile->tiy = get_tex_pos(tex_ypos, span->tex_height); - tile->tile = span->tex_addr; + tile = &tilelist->tileinfo[tilelist->size++]; + setTileInfo(tile, tex_xpos, tex_ypos, span->tex_width, + (uint32*)span->tex_addr); } else { while (cur_x <= span->length_x) { if (cur_x + MAX_TILE_LIST - 1 < span->length_x) { @@ -159,16 +204,22 @@ 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 = get_tex_pos(tex_xpos, span->tex_width); - tile->tiy = get_tex_pos(tex_ypos, span->tex_height); + /** + * 座標が [0..MAX-1] を超えない様に + * なんかもっと良い書き方ありそうだけど + */ + if (tex_xpos < 0) tex_xpos = 0; + if (span->tex_width - 1 < tex_xpos) { + tex_xpos = span->tex_width - 1; + } + if (tex_ypos < 0) tex_ypos = 0; + if (span->tex_height - 1 < tex_ypos) { + tex_ypos = span->tex_height - 1; + } - 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 = &tilelist->tileinfo[tilelist->size++]; + setTileInfo(tile, tex_xpos, tex_ypos, span->tex_width, + (uint32*)span->tex_addr); } if (cur_x + MAX_TILE_LIST - 1 < span->length_x) { @@ -410,9 +461,7 @@ // TilePtr の計算 // tix, tiy (Tile 内での x, y) - // - //smanager->mainMem_wait(); - setTile(span); + setTileInfoList(span); } } diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/task/CreateSpan.h --- a/TaskManager/Test/test_render/task/CreateSpan.h Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/task/CreateSpan.h Mon Dec 08 16:37:02 2008 +0900 @@ -22,7 +22,9 @@ int charge_y_top, int charge_y_end, long *tex_addr, long tex_width, long tex_height, VertexPack *vMin,VertexPack *vMid,VertexPack *vMid1); - void setTile(SpanPtr span); + void setTileInfoList(SpanPtr span); + void setTileInfo(TileInfoPtr tile, int xpos, int ypos, + int tex_width, uint32* tex_addr_top); }; #endif diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/task/DrawSpan.cpp --- a/TaskManager/Test/test_render/task/DrawSpan.cpp Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/task/DrawSpan.cpp Mon Dec 08 16:37:02 2008 +0900 @@ -14,7 +14,7 @@ static const int hashsize = 263; -static TilePtr hash_table[hashsize] = {NULL}; +static TilePtr hash_table[hashsize] = {0}; unsigned short PRIME[8] = { 0x002, 0x065, 0x0c7, 0x133, 0x191, 0x1f3, 0x259, 0x2bd, @@ -123,7 +123,7 @@ tile->texture_addr = addr; smanager->dma_load(tile->pixel, (uint32)addr, - sizeof(uint32)*64, TEX_LOAD); + sizeof(uint32)*TEXTURE_BLOCK_SIZE, TEX_LOAD); int index = put(tile->texture_addr, tile); @@ -167,15 +167,11 @@ (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList)); TileInfoListPtr next_tilist = (TileInfoListPtr)smanager->allocate(sizeof(TileInfoList)); - TileInfoPtr tinfo; - tileList = (TileListPtr)smanager->allocate(sizeof(TileList)); tileList->init(); - int render_y = sp->info.y_top; - void *texture_image = global_get(TEXTURE_ID); - + void *texture_image = global_get(TEXTURE_ID); int rangex_start = get_param(0); // Υô x ϰϤλ int rangex_end = get_param(1); // (start <= x <= end) int rangey = get_param(2); // y ϰ (render_y + rangey - 1) @@ -212,10 +208,6 @@ sizeof(TileInfoList), TILE_INFO_LOAD); Uint32 rgb = 0x00ff00; - float tex1 = span->tex_x1; - float tex2 = span->tex_x2; - float tey1 = span->tex_y1; - float tey2 = span->tex_y2; int tex_xpos; int tex_ypos; int tex_zpos; @@ -236,15 +228,10 @@ continue; } -#if 1 tex_xpos = tilist->tileinfo[0].tix; tex_ypos = tilist->tileinfo[0].tiy; + tex_zpos = (int)z; texture_image = tilist->tileinfo[0].tile; -#else - tex_xpos = (int)((span->tex_width-1) * tex1); - tex_ypos = (int)((span->tex_height-1) * tey1); - tex_zpos = (int)z; -#endif if (zpos < zRow[localx + (rangex * localy)]) { rgb = get_rgb(tex_xpos, tex_ypos, texture_image); @@ -301,25 +288,16 @@ len = max_x - cur_x; } - float tex_x, tex_y, tex_z; - for (int j = cur_x; j <= cur_x + len; j++) { TileInfoPtr tinfo = &tilist->tileinfo[j%MAX_TILE_LIST]; + float tex_z + = z*(x_len-1-j)/(x_len-1) + zpos*j/(x_len-1); + localx = getLocalX(x-1+j); - tex_z = z*(x_len-1-j)/(x_len-1) + zpos*j/(x_len-1); -#if 1 tex_xpos = tinfo->tix; tex_ypos = tinfo->tiy; texture_image = tinfo->tile; -#else - tex_x = tex1*(x_len-1-j)/(x_len-1) + tex2*j/(x_len-1); - tex_y = tey1*(x_len-1-j)/(x_len-1) + tey2*j/(x_len-1); - if (tex_x > 1) tex_x = 1; - if (tex_y > 1) tex_y = 1; - tex_xpos = (int)((span->tex_width-1) * tex_x); - tex_ypos = (int)((span->tex_height-1) * tex_y); -#endif if (tex_z < zRow[localx + (rangex*localy)]) { rgb = get_rgb(tex_xpos, tex_ypos, texture_image); diff -r d5cca23ed50c -r 1f4c3f3238e6 TaskManager/Test/test_render/viewer_types.h --- a/TaskManager/Test/test_render/viewer_types.h Mon Dec 08 10:56:58 2008 +0900 +++ b/TaskManager/Test/test_render/viewer_types.h Mon Dec 08 16:37:02 2008 +0900 @@ -4,6 +4,7 @@ // texture 8x8 ʬ // ͤϡSpanPack ˤȤ const int TEXTURE_SPLIT_PIXEL = 8; +const int TEXTURE_BLOCK_SIZE = TEXTURE_SPLIT_PIXEL*TEXTURE_SPLIT_PIXEL; // Ĥ SPE ô width, height (pixel) const int split_screen_w = 512; diff -r d5cca23ed50c -r 1f4c3f3238e6 include/TaskManager/base.h --- a/include/TaskManager/base.h Mon Dec 08 10:56:58 2008 +0900 +++ b/include/TaskManager/base.h Mon Dec 08 16:37:02 2008 +0900 @@ -3,8 +3,8 @@ #include -#ifdef __SPU__ -//#if 0 +//#ifdef __SPU__ +#if 0 # define BASE_NEW_DELETE(T) \ /* override new/detele */ \ static void* operator new(size_t size) { \