Mercurial > hg > Members > kono > Cerium
diff TaskManager/Test/test_render/spe/DrawSpan.cpp @ 233:d734af296d38
fix
author | gongo@localhost.localdomain |
---|---|
date | Sun, 29 Mar 2009 21:13:17 +0900 |
parents | 159519cdca1f |
children | 52db409f255a 9a0176152058 |
line wrap: on
line diff
--- a/TaskManager/Test/test_render/spe/DrawSpan.cpp Tue Feb 24 15:28:51 2009 +0900 +++ b/TaskManager/Test/test_render/spe/DrawSpan.cpp Sun Mar 29 21:13:17 2009 +0900 @@ -374,6 +374,23 @@ //printf("%d\n", js); } +/** + * 長さが 1 より大きい Span の描画 + * + * 本来の目的として、この関数(drawLine1) では + * : 既に SPE 上に Tile のある pixel だけ描画 + * : それ以外は、ここで予め DMA load しておき、 + * : drawLine2 で一気に描画する + * ってものだったんだけど、どうも上手く行かなかったので + * 今は drawLine1 で load -> wait -> rendering を全部やってます + * (rendering といっても、rendering buffer に書き込むだけで + * まだ main memory (frame buffer) に dma store してるわけではない) + * + * @param span Span + * @param startx 描画開始範囲 + * @param endx 描画終了範囲 + * @return 「span のどの位置まで rendering が終わったか」の x 座標 + */ int DrawSpan::drawLine1(SpanPtr span, int startx, int endx, int wait_tag) { @@ -433,12 +450,11 @@ tex_localx = tex_xpos % TEXTURE_SPLIT_PIXEL; tex_localy = tex_ypos % TEXTURE_SPLIT_PIXEL; - //set_rgb(tex_addr, wait_tag); - //ret = j; - //continue; - if (!isAvailableTile(tex_addr)) { #if 0 + // span が必要とするであろう tile を予想紙 + // set_rgbs で複数同時に load しようとしている図 + // まあ上手くいかなかったんだけど。。 tex_x = tex1*(x_len-1-js)/(x_len-1) + tex2*js/(x_len-1); if (tex_x > 1) tex_x = 1; if (tex_x < 0) tex_x = 0; @@ -452,9 +468,6 @@ #else set_rgb(tex_addr, wait_tag); smanager->dma_wait(wait_tag); - ret = j; - //j -= 3; - continue; #endif } @@ -466,6 +479,17 @@ return ret; } +/** + * 長さが 1 より大きい Span の描画 (2段階目) + * + * 上にあるように、drawLine2 は今は動いてないです + * 正確には、js が startx ~ endx 範囲外にあり開始されないってところ + * + * @param span Span + * @param startx 描画開始範囲 + * @param endx 描画終了範囲 + * @param js 前回(drawLine1) で span のどこまで終わっているか + */ void DrawSpan::drawLine2(SpanPtr span, int startx, int endx, int js, int wait_tag) { @@ -595,6 +619,9 @@ span = &spack->span[t]; + /** + * span の長さによって、drawLine か drawDot を選択している + */ next_span_x = (this->*drawFunc1[(span->length_x != 1)])( span, rangex_start, rangex_end, tl_tag[tl_tag_flg1]); @@ -613,9 +640,10 @@ tl_tag_flg2 ^= 1; } - (this->*drawFunc2[(resume_span->length_x != 1)])( - resume_span, rangex_start, rangex_end, resume_span_x, - tl_tag[tl_tag_flg1]); + // 現在 drawLine2、drawDot2 は機能してないので + //(this->*drawFunc2[(resume_span->length_x != 1)])( + //resume_span, rangex_start, rangex_end, resume_span_x, + //tl_tag[tl_tag_flg1]); smanager->dma_wait(SPAN_PACK_LOAD);