/*
 * $Id: dynamic.h,v 1.1 2003/02/07 18:15:44 wheeler Exp $
 * $Log: dynamic.h,v $
 * Revision 1.1  2003/02/07 18:15:44  wheeler
 * Fox's version of libultra and friends.
 *
 * Revision 1.11  1997/01/29  12:05:07  hayakawa
 * 細かい修正
 * バッファサイズを増加
 *
 * Revision 1.10  1996/11/21  06:22:47  hayakawa
 * ダイナミックバッファを６４ＫＢに減らしてみた
 *
 */

#ifndef __DYNAMIC_H_
#define __DYNAMIC_H_

#include "ultra64.h"
#include "bg.h"

#ifndef BUFSIZ_GLIST
#define BUFSIZ_GLIST	0x20000	/* 128kbytes */
#endif

/*
 * ダイナミックセグメントのレイアウト
 */
typedef struct BG_Dynamic_s {
    u16 magic;			/* マジックナンバー（領域破壊対策） */
    u16 padding;		/* アライメント */
    Gfx *BGglistp;		/* ディスプレイリストポインタ(連続領域) */
    Gfx *BGglistrp;		/* Vtx,Mtx,Etcのアロケーション用(非連続領域) */
    Mtx	*Projection_p;		/* 射影行列 */
    Vp  *Viewport_p;		/* ビューポート */
    unsigned long segtbl[NUM_SEGMENTS];	/* セグメントベースアドレス */
    bg_Image_t Image;		/* 現在のフレーム(Z)バッファへ */
    bg_Scissor_t Scissor;	/* シザリングボックス */
    Gfx	glist[BUFSIZ_GLIST / sizeof(Gfx)]; /* ディスプレイリスト&フレームアロケーション */
    
} BG_Dynamic_t;

typedef struct {
    BG_Dynamic_t bg;
} Dynamic_t;

extern Dynamic_t dynamic;	/* RCP用ダイナミック構造体 */
extern Dynamic_t *dynamicp;	/* 現在のダイナミックセグメントへのポインタ */

#endif /* __DYNAMIC_H_ */
