us2dex.c 1.77 KB
/*---------------------------------------------------------------------
  $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 ========*/