/*
 * $Id: bg_bitmap1x.h,v 1.1 2003/02/07 18:15:44 wheeler Exp $
 *
 * ＢＧライブラリインクルードファイル
 *
 * $Log: bg_bitmap1x.h,v $
 * Revision 1.1  2003/02/07 18:15:44  wheeler
 * Fox's version of libultra and friends.
 *
 * Revision 1.3  1996/11/21  05:29:49  hayakawa
 * ゴミを消した
 *
 * Revision 1.2  1996/10/24  01:05:07  hayakawa
 * c++対応
 *
 * Revision 1.1  1996/10/20  08:54:43  hayakawa
 * Initial revision
 *
 */

#ifndef __BG_BITMAP1X_H_
#define __BG_BITMAP1X_H_

#include "ultra64.h"

/*
 * ビットマップ定義構造体
 * 共用 タイプ(未完成見切り発車バージョン)
 * １つのビットマップを定義できる
 */
struct bg_bitmap1x_s;
typedef struct bg_bitmap1x_s BG_Bitmap1x;
struct bg_bitmap1x_s {
    void		*timg;	/* テクスチャ先頭ポインタ */
    unsigned short	fmt:3;	/* (3b):テクセルのフォーマット(RGBA,YUV,CI,IA,I) */
    unsigned short	siz:2;	/* (2b):テクセルのサイズ(4,8,16,32) */
    unsigned int	xDot:16; /* 横テクセル数 1-255,(256) */
    unsigned int	yDot:16; /* 縦テクセル数 1-255,(256) */
    signed   int        xOff:16; /* 中心から見た基準点へのオフセットＸ */
    signed   int        yOff:16; /* 中心から見た基準点へのオフセットＹ */
    unsigned short	tt;	/* (1)CIの時フォーマット(RGBA16,IA16) */
//  unsigned int	tile:3;	/* (3)使用タイルディスクリプタ(0,1-5) */
    u16			*tlut;	/* CIの時のカラーテーブル */
				/* オプション */
    Gfx			*gfx;	/* ディスプレイリストへのポインタ */
				/* SetRenderTile+LoadTextureImage */
    Vtx 		*vtx;	/* Vtx(lt,rt,lb,rb)(NULLの時は内部で計算する) */
};

#ifdef __cplusplus
extern "C" {
#endif

void
bm1x_init(
    BG_Bitmap1x *const bm1,	/* ビットマップ */
    const int xdot,		/* 横テクセル数 */
    const int ydot,		/* 縦テクセル数 */
    const int xoff,		/* 基準点への横オフセット */
    const int yoff,		/* 基準点への縦オフセット */
    const int fmt,		/* フォーマット */
    const int siz,		/* データサイズ */
    void *const timg,		/* ビットマップデータへのポインタ */
    const int tt,		/* CIの時フォーマット(RGBA16,IA16) */
    u16 *const tlut		/* CIの時のカラーテーブル */
);
#define bm1x_getTimg(p1) ((p1)->timg)
#define bm1x_setTimg(p1, p2) ((p1)->timg = (p2))
#define bm1x_setOff(p1, xoff1, yoff1) ((p1)->xOff = (xoff1), (p1)->yOff = (yoff1))
#define bm1x_getXoff(p1) ((p1)->xOff)
#define bm1x_getYoff(p1) ((p1)->yOff)
#define bm1x_getTlut(p1) ((p1)->tlut)
#define bm1x_setTlut(p1, p2) ((p1)->tlut = (p2))
#define bm1x_getUnitsize(p1) getbytes2((p1)->siz, (p1)->yDot * (p1)->xDot)
#define bm1x_setNextBM(p1, p2) ((p1)->next_bm = (p2))
#define bm1x_getNextBM(p1) ((p1)->next_bm)

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* __BG_BITMAP1X_H_ */
