annotate Renderer/Engine/Tapestry.h @ 507:735f76483bb2

Reorganization..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 12 Oct 2009 09:39:35 +0900
parents Renderer/test_render/Tapestry.h@55ea4465b1a2
children 32a7260fad2f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
1 #ifndef INCLUDED_TAPESTRY
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
2 #define INCLUDED_TAPESTRY
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
3
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
4 #include "types.h"
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
5 #include "viewer_types.h"
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
6 #include "MemorySegment.h"
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
7 #include "MemList.h"
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
8
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
9 /**
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
10 * image file name と tapestry DB の binary tree
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
11 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
12 * // PPE
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
13 * main memory の tapestry DB (Array)
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
14 * tapestry DB への accessor
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
15 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
16 * TapestryPtr getTapestry(int TapestryID);
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
17 * TilePtr getTile(TapestryPtr tapsetry, int tx, int ty, int scale);
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
18 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
19 * SPE が生成する tapestry List (in CreateSpan)
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
20 * (no texture image)
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
21 * @in TapestryDBPtr, Tapestry ID, x, y, tx, ty, px, py
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
22 * x, y : polygon の中の平面座標
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
23 * tx, ty : texture の座標
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
24 * px, py : texture の分割数
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
25 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
26 * @out (TilePtr, tix1, tiy1, tix2, tiy2)*
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
27 *
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
28 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
29 * SPE に渡す tapestry List
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
30 * @in Tile
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
31 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
32 * // SPE
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
33 * SPE 内部での tapestry DB (Hash)
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
34 * TapestryID, scale, TilePtr, Tile
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
35 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
36 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
37 * SPE 内部での tapestry DB への accessor
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
38 * TileEntryPtr getTile(int TapestryID, int tx, int ty, int scale);
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
39 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
40 * if (TileEntry == NULL) {
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
41 * DMA read
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
42 * }
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
43 *
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
44 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
45 * Rendering
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
46 * 1pass Zbuffer と Texture の有無の判定
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
47 * if (zbuffer ok) {
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
48 * if (texture ある) {
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
49 * zbuffer 、linebunf に書き込む
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
50 * } else {
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
51 * texture の load list に加える
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
52 * zbuffer だけ更新しておく
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
53 * }
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
54 * } else {
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
55 * 無視
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
56 * }
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
57 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
58 * 1pass で texture が一杯になったら、中断して
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
59 * ここまでのを書き込んどけ
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
60 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
61 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
62 * 2pass rgb の書き込み
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
63 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
64 * if (zbuffer の値が自分と一緒) {
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
65 * read した texture みて
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
66 * 書き込め!
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
67 * }
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
68 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
69 */
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
70 struct texture_block {
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
71
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
72 };
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
73
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
74 #ifdef USE_MEMLIST
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
75 typedef MemorySegment Tile, *TilePtr;
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
76 #else
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
77 typedef struct {
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
78 uint32 data[TEXTURE_BLOCK_SIZE]; // 8*8
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
79 uint32 *address;
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
80 int pad[3];
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
81 } Tile, *TilePtr;
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
82 #endif
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
83
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
84 #define MAX_TILE 128
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
85
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
86 /**
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
87 * TileList 中の Tile の追い出しは、現在 FIFO で実装している
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
88 * これは汎用のサイズ別 freelist に置き換える
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
89 * freelist は double linked list で、LRU をサポートする
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
90 */
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
91 #ifdef USE_MEMLIST
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
92 class TileList : public MemList {
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
93 TileList(MemorySegment* ms) : MemList(ms) {}
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
94
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
95 /*!
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
96 中身は同じ
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
97 */
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
98 };
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
99 #else
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
100 class TileList {
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
101 public:
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
102 int curIndex;
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
103 int pad[3];
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
104 Tile tile[MAX_TILE];
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
105
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
106 TileList(void) {
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
107 curIndex = 0;
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
108 }
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
109
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
110 /**
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
111 * 次に扱う tile を取得する
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
112 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
113 * @return tile
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
114 *
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
115 * tile[] をリングバスっぽく扱うことで
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
116 * FIFO を実現することに。
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
117 */
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
118 TilePtr nextTile(void) {
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
119 TilePtr t = &tile[curIndex];
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
120 curIndex = (curIndex + 1) % MAX_TILE;
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
121 return t;
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
122 }
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
123
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
124 /**
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
125 * TileList のクリア
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
126 * //tile 自体は clear する必要は無い
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
127 * あるかもしれない
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
128 */
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
129 void clear(void) {
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
130 curIndex = 0;
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
131 }
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
132 };
507
735f76483bb2 Reorganization..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 283
diff changeset
133 #endif
283
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
134
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
135 typedef TileList* TileListPtr;
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
136
55ea4465b1a2 fix test_render
e065746@localhost.localdomain
parents:
diff changeset
137 #endif