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