283
|
1 #ifndef INCLUDED_TAPESTRY
|
|
2 #define INCLUDED_TAPESTRY
|
|
3
|
507
|
4 #include "types.h"
|
|
5 #include "viewer_types.h"
|
|
6 #include "MemorySegment.h"
|
|
7 #include "MemList.h"
|
283
|
8
|
|
9 /**
|
|
10 * image file name と tapestry DB の binary tree
|
|
11 *
|
|
12 * // PPE
|
|
13 * main memory の tapestry DB (Array)
|
507
|
14 * tapestry DB への accessor
|
283
|
15 *
|
|
16 * TapestryPtr getTapestry(int TapestryID);
|
|
17 * TilePtr getTile(TapestryPtr tapsetry, int tx, int ty, int scale);
|
|
18 *
|
|
19 * SPE が生成する tapestry List (in CreateSpan)
|
|
20 * (no texture image)
|
|
21 * @in TapestryDBPtr, Tapestry ID, x, y, tx, ty, px, py
|
|
22 * x, y : polygon の中の平面座標
|
|
23 * tx, ty : texture の座標
|
|
24 * px, py : texture の分割数
|
|
25 *
|
|
26 * @out (TilePtr, tix1, tiy1, tix2, tiy2)*
|
507
|
27 *
|
283
|
28 *
|
|
29 * SPE に渡す tapestry List
|
|
30 * @in Tile
|
|
31 *
|
|
32 * // SPE
|
|
33 * SPE 内部での tapestry DB (Hash)
|
|
34 * TapestryID, scale, TilePtr, Tile
|
|
35 *
|
|
36 *
|
|
37 * SPE 内部での tapestry DB への accessor
|
|
38 * TileEntryPtr getTile(int TapestryID, int tx, int ty, int scale);
|
|
39 *
|
|
40 * if (TileEntry == NULL) {
|
|
41 * DMA read
|
|
42 * }
|
507
|
43 *
|
283
|
44 *
|
|
45 * Rendering
|
|
46 * 1pass Zbuffer と Texture の有無の判定
|
|
47 * if (zbuffer ok) {
|
|
48 * if (texture ある) {
|
|
49 * zbuffer 、linebunf に書き込む
|
|
50 * } else {
|
|
51 * texture の load list に加える
|
|
52 * zbuffer だけ更新しておく
|
|
53 * }
|
|
54 * } else {
|
|
55 * 無視
|
|
56 * }
|
|
57 *
|
|
58 * 1pass で texture が一杯になったら、中断して
|
|
59 * ここまでのを書き込んどけ
|
|
60 *
|
|
61 *
|
|
62 * 2pass rgb の書き込み
|
|
63 *
|
|
64 * if (zbuffer の値が自分と一緒) {
|
|
65 * read した texture みて
|
|
66 * 書き込め!
|
|
67 * }
|
|
68 *
|
|
69 */
|
|
70 struct texture_block {
|
507
|
71
|
283
|
72 };
|
|
73
|
507
|
74 typedef MemorySegment Tile, *TilePtr;
|
283
|
75
|
|
76 #define MAX_TILE 128
|
|
77
|
|
78 /**
|
|
79 * TileList 中の Tile の追い出しは、現在 FIFO で実装している
|
507
|
80 * これは汎用のサイズ別 freelist に置き換える
|
|
81 * freelist は double linked list で、LRU をサポートする
|
|
82 */
|
|
83 class TileList : public MemList {
|
|
84 TileList(MemorySegment* ms) : MemList(ms) {}
|
|
85
|
|
86 /*!
|
|
87 中身は同じ
|
283
|
88 */
|
507
|
89 };
|
283
|
90
|
|
91 typedef TileList* TileListPtr;
|
|
92
|
|
93 #endif
|