us2dex.c
1.77 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
/*---------------------------------------------------------------------
$Id: us2dex.c,v 1.1.1.1 2002/05/02 03:28:43 blythe Exp $
File : us2dex.c
Coded by Yoshitaka Yasumoto. Mar 19, 1997.
Copyright by Nintendo, Co., Ltd. 1997.
---------------------------------------------------------------------*/
#include <ultra64.h>
#include <PR/gs2dex.h>
/*
* S2DEX マイクロコードの処理を補助するためのルーチン群
*/
/*
* guS2DInitBG
* BG 面の描画パラメータの設定
*
* 初期化時に一度呼び出したら, あとは imageFmt, imageSiz, imageLoad,
* imageW, frameW を変更したときのみ再度呼び出せば充分である.
* ただし imageLoad == G_BGLT_LOADBLOCK のときは frameW のみの変更時に
* 再呼び出しする必要はない.
*/
void guS2DInitBg(uObjBg *bg)
{
u16 tmemUse;
u16 shift;
u32 tsize;
/*
* TMEM の使用可能量の取得
* もし, imageFmt が CI なら TLUT に半分使用される
*/
tmemUse = (bg->b.imageFmt == G_IM_FMT_CI) ? 256 : 512;
/*
* TMEM word への変換のためのシフト量の取得
*/
shift = 6 - bg->b.imageSiz;
/*
* Load Mode 別のパラメータの設定
*/
if (bg->b.imageLoad == G_BGLT_LOADBLOCK){
bg->b.tmemW = bg->b.imageW >> shift;
bg->b.tmemH = (tmemUse / bg->b.tmemW) << 2;
bg->b.tmemSizeW = bg->b.tmemW << 1;
bg->b.tmemSize = bg->b.tmemH * bg->b.tmemSizeW;
bg->b.tmemLoadSH = (bg->b.tmemSize>>1) - 1;
bg->b.tmemLoadTH = GS_CALC_DXT(bg->b.tmemW);
} else {
bg->b.tmemW = (bg->b.frameW >> shift) + 3;
bg->b.tmemH = (tmemUse / bg->b.tmemW) << 2;
bg->b.tmemSizeW = (bg->b.imageW >> shift) * 2;
tsize = bg->b.tmemH * bg->b.tmemSizeW;
bg->b.tmemSize = tsize >> 16;
bg->b.tmemLoadSH = tsize & 0xffff;
bg->b.tmemLoadTH = bg->b.tmemH - 1;
}
return;
}
/*======== End of us2dex.c ========*/