README.TXT
3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
======================================
NINTENDO64 TECHNICAL SUPPORT CENTER
NINTENDO64 SAMPLE PROGRAM 2
Copyright (C) 1997, NINTENDO Co,Ltd.
======================================
【0】目次
【1】はじめに
【2】make方法
【3】操作方法
【4】プログラム説明
【5】権利・再利用
【6】履歴
【1】はじめに
本プログラムは、F3DEX Ver1.21マイクロコードのサンプルプログラムです。
ベースはnnsample1と同じで、F3DEX Ver1.21から追加された機能である
BranchDisplayListとマイクロコードのダイレクトロードを
使っています。 F3DEX Ver1.21ではBranchDisplayListをucodeが行うので
LOD(Level Of Detail)処理が簡単におこなえます。マクロコードのダイレクト
ロードにより、グラフィックタスクのスケジューリングがシンプルになり、
処理によって簡単にマイクロコードを切り替えることができます。
【2】make方法
Indyのエミュレータボードをご使用の場合でも、PARTNER-N64をご使用の
場合でも、そのままmakeしてください。
【3】操作方法
「十字キー」 オブジェクトの左右と奥行き方向の移動
「STARTボタン」 画面の初期化
【4】プログラム説明
(1)LOD処理について
LODにより視点からモデルの位置により次の文字のモデルを描画しています。
視点から500まで "NEAR"
501から1000まで "MIDDLE"
1001から1600まで"FAR"
1601以上描画せず
このDisplayListで示すと次のようになります。(lodmodel.c参照)
gsSPBranchLessZ(near__dl, 0, 500, 10, 2000, G_BZ_PERSP),
gsSPBranchLessZ(middle__dl, 0, 1000, 10, 2000, G_BZ_PERSP),
gsSPBranchLessZ(far__dl, 0, 1600, 10, 2000, G_BZ_PERSP),
gsSPEndDisplayList(),
このように、ucode側で視点からモデルまでの距離を計算してLOD処理を
行ってくれます。
(2)マイクロコードのダイレクトロードについて
graphic.cの84行目のように、ディスプレイリストの作成部分で
gSPLoadUcodeL(glist_ptr++, gspL3DEX_fifo);
などとすることにより、動的にマイクロコードの変更できるように
なっています。このことにより、描画対象によって簡単にマイクロコードを
切り替えられ、スケジューリングも簡単になります。
ただし、マイクロコードのロードはオーバーヘッドとなるので
頻繁に切り替えることはしないほうが良いでしょう。
(3)fifoマイクロコードの使用上の注意について
RDP OUTPUT SIZEについて
fifoグラフィックマイクロコードを使用する場合は、タスク起動時に
OSTask構造体の"*t.output_buff_size"にはfifoバッファの最大ポインタ+1
を入れる必要があります。例えば、このサンプルでは
---def.h---
#define GFX_RDP_OUTPUT_SIZE 1024 /* RDP FIFOサイズ */
---rdp_output.c---
u64 rdp_output[GFX_RDP_OUTPUT_SIZE];
---graphic.c---
gtask->list.t.output_buff = (u64 *)&rdp_output[0];
gtask->list.t.output_buff_size = (u64 *)&rdp_output[GFX_RDP_OUTPUT_SIZE];
というようにポインタを代入して使っています。dramマイクロコードや
xbusの場合では、このポインタ変数の役割が異なるので注意して
下さい。
【5】権利・再利用
本サンプルプログラムの著作権は任天堂株式会社が所有します。
ソースコードの再利用および改変は自由にしてくださって結構ですが、
本サンプルプログラムのデバッグを十分におこなっていません。
その為、使用にあたっては、十分にデバッグを行って頂くよう
お願いします。
【6】履歴
1.0 1997/01/30 nnsample2公開
1.1 1997/02/03 nnsched.cの不具合を修正
1.2 1997/12/09 ・ワーニングを抑制
・RDP FIFO バッファサイズの誤り修正
以上