/*
 * $Id: bg.h,v 1.1 2003/02/07 18:15:44 wheeler Exp $
 *
 * ＢＧライブラリインクルードファイル
 *
 * $Log: bg.h,v $
 * Revision 1.1  2003/02/07 18:15:44  wheeler
 * Fox's version of libultra and friends.
 *
 * Revision 1.36  1997/03/05  05:50:22  hayakawa
 * 不要なプロトタイプの削除
 *
 * Revision 1.35  1997/02/07  10:22:36  hayakawa
 * ターボ関係削除
 *
 * Revision 1.34  1997/01/29  11:58:59  hayakawa
 * ターボマイクロコード関係を削除
 * funcx用フラグ追加
 *
 * Revision 1.33  1996/12/02  05:27:16  hayakawa
 * Ｚバッファ対応開始
 * bg_SetZBufferの追加
 *
 * Revision 1.32  1996/11/26  10:26:41  hayakawa
 * header.hをはずし、個別にインクルードするようにした
 * OBJ3に対応
 *
 * Revision 1.31  1996/11/21  05:16:14  hayakawa
 * 不要なグローバル変数の排除
 * 型定義を別ヘッダに移動
 *
 * Revision 1.30  1996/10/29  12:36:18  hayakawa
 * BG_FUNCマクロ追加
 * BG_AUTO_DISABLE削除
 * USE_UCODE_TURBO3D条件コンパイル
 *
 * Revision 1.29  1996/10/20  09:21:18  hayakawa
 * いろいろ修正
 * _LANGUAGE_C_PLUS_PLUS を __cplusplus に変更
 *
 * Revision 1.28  1996/10/14  02:05:07  hayakawa
 * ヘッダ修正
 *
 */

#ifndef __BG_H_
#define __BG_H_

#include "bg_config.h"
#include "ultra64.h"
#include "bg_types.h"
#include "bg_bitmap1x.h"
#include "bg_turbo.h"

#define SCISSOR_XL 0
#define SCISSOR_YL 0
#define SCISSOR_XH (SCREEN_WD - 1)
#define SCISSOR_YH (SCREEN_HT - 1)

#define G_TX_LOADTILE6 6	/* gbiマクロで7を使っているので、6にした */

#define BG_FUNC_HIDDEN		0x00000001 /* フラグがあると無効 */
#define BG_FUNC_SYNC		0x00000002 /* RDPの処理が完了するのを待つ */
#define BG_FUNC_GFXLIST		0x00000004 /* ucode == Any */
#define BG_FUNC_POLYGFXLIST	0x00000008 /* ucode == Fast3D */
#define BG_FUNC_LINEGFXLIST	0x00000010 /* ucode == Line3D */
#define BG_FUNC_SPRITEGFXLIST	0x00000020 /* ucode == Sprite2D */
#define BG_FUNC_KEEP_ATTR	0x00000040 /* アトリビュート保持の保証 */



/*
 * For bg->attr
 */

#define BG_TRANSPARENT		0x00000001 /* α値処理 */
#define BG_CUTOUT		0x00000002 /* カットアウト処理 (G_RM_AA_TEX_EDGE)*/
#define BG_HIDDEN		0x00000004 /* 表示しない */
#define BG_FLIPH		0x00000008 /* 左右反転 */
#define BG_FLIPV		0x00000010 /* 上下反転 */
#define BG_Z			0x00000020 /* Ｚバッファ有効 */
#define BG_SCALE		0x00000040 /* 拡大縮小 */
#define BG_FLIPN		0x00000080 /* ＸＹ反転 */
#define BG_BILERP		0x00000100 /* ドットをぼかす */
#define BG_FASTCOPY		0x00000200 /* コピーモードを使う */
#define BG_MODULATE		0x00000400 /* Modulate/Decal */

#if BGLIB_FOR_BGTEST
/*
 * For bg1_setOffset()
 */

#define BG_OFFSET_CENTER	0x0000FFFF
#endif /* BGLIB_FOR_BGTEST */

enum drawtype_e {
    DRAWTYPE_ZERO = 0,
    DRAWTYPE_BG1,
    DRAWTYPE_BG2,
    DRAWTYPE_OBJ1x,
    DRAWTYPE_OBJ2x,
    DRAWTYPE_OBJ1a,
    DRAWTYPE_OBJ2a,
    DRAWTYPE_OBJ3,
    DRAWTYPE_FUNCX,
    DRAWTYPE_END		/* dummy */
};


/*
 * 関数プロトタイプ
 */

#ifdef __cplusplus
extern "C" {
#endif

void
bgInit(
    BG_Zentai *const zt		/* ＢＧ全体定義へのポインタ */
);

void DrawFrameBuffer( void );
void DisplayFrameBuffer( void );

void gfx_init( Gfx **glistpp );
void flush( Gfx **glistpp );

#if USE_ZBUFFER
/*
 * zbがNULLなら、Ｚバッファを無効にする。
 * !NULLならＺバッファの有効にする(zbから約１５０Ｋバイトを使用します。)
 */
#define bg_SetZBuffer(zt, zb) ((zt)->Image.MaskImage = (zb))
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

/*
 * 外部変数定義
 */
extern BG_Zentai 	*BGzenPtr;	/* ＢＧ全体定義へのポインタ */
extern BG_Zsort		*BGzsPtr;	/* Ｚソートバッファへのポインタ */
extern int		BGzsMax;	/* Ｚソートバッファへの数 */

#endif /* __BG_H_ */
