diff Renderer/Engine/Tapestry.h @ 0:04e28d8d3c6f

first commit
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 08 Nov 2010 01:23:25 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Renderer/Engine/Tapestry.h	Mon Nov 08 01:23:25 2010 +0900
@@ -0,0 +1,93 @@
+#ifndef INCLUDED_TAPESTRY
+#define INCLUDED_TAPESTRY
+
+#include "types.h"
+#include "viewer_types.h"
+#include "MemorySegment.h"
+#include "MemList.h"
+
+/**
+ * image file name と tapestry DB の binary tree
+ *
+ * // PPE
+ * main memory の tapestry DB (Array)
+ * tapestry DB への accessor
+ *
+ *   TapestryPtr getTapestry(int TapestryID);
+ *   TilePtr getTile(TapestryPtr tapsetry, int tx, int ty, int scale);
+ *
+ * SPE が生成する tapestry List (in CreateSpan)
+ *   (no texture image)
+ *   @in  TapestryDBPtr, Tapestry ID, x, y, tx, ty, px, py
+ *     x, y   : polygon の中の平面座標
+ *     tx, ty : texture の座標
+ *     px, py : texture の分割数
+ *
+ *   @out (TilePtr, tix1, tiy1, tix2, tiy2)*
+ *
+ *
+ * SPE に渡す tapestry List
+ *   @in Tile
+ *
+ * // SPE
+ * SPE 内部での tapestry DB (Hash)
+ *   TapestryID, scale, TilePtr, Tile
+ *
+ *
+ * SPE 内部での tapestry DB への accessor
+ *   TileEntryPtr getTile(int TapestryID, int tx, int ty, int scale);
+ *
+ *   if (TileEntry == NULL) {
+ *      DMA read
+ *   }
+ *
+ *
+ * Rendering
+ *   1pass Zbuffer と Texture の有無の判定
+ *     if (zbuffer ok) {
+ *       if (texture ある) {
+ *         zbuffer 、linebunf に書き込む
+ *       } else {
+ *         texture の load list に加える
+ *         zbuffer だけ更新しておく
+ *       }
+ *     } else {
+ *       無視
+ *     }
+ *
+ *    1pass で texture が一杯になったら、中断して
+ *    ここまでのを書き込んどけ
+ *
+ *
+ *    2pass rgb の書き込み
+ *
+ *    if (zbuffer の値が自分と一緒) {
+ *       read した texture みて
+ *       書き込め!
+ *    }
+ *
+ */
+struct texture_block {
+
+};
+
+typedef MemorySegment Tile, *TilePtr;
+
+#define MAX_TILE 128
+
+/**
+ * TileList 中の Tile の追い出しは、現在 FIFO で実装している
+ * これは汎用のサイズ別 freelist に置き換える
+ * freelist は double linked list で、LRU をサポートする
+*/
+class TileList : public MemList {
+    TileList(MemorySegment* ms) : MemList(ms) {}
+
+/*!
+  中身は同じ
+ */
+};
+
+typedef TileList* TileListPtr;
+
+#endif