graphic.h
3.05 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*============================================================================
NINTENDO64 TECHNICAL SUPPORT CENTER
NINTENDO64 SAMPLE PROGRAM 2
Copyright (C) 1997, NINTENDO Co,Ltd.
============================================================================*/
#ifndef _GRAPHIC_H_
#define _GRAPHIC_H_
#define GFX_MESGS_MAX 8
#define GFX_GLIST_LEN 2048
#define GFX_00 00
#define GFX_01 01
#define GFX_10 10
#define GFX_20 20
#define GFX_30 30
#define GFX_NULL 0xffffffff
/* グラフィックマイクロコード */
#define GFX_GSPCODE_F3DEX2 0
/* グラフィックタスク数(1フレーム) */
#define GFX_GTASK_NUM 8
/*-------------------------- define structure ------------------------------ */
/*
ここにある構造体定義は、このサンプル用に定義してあります。
用途によって適宜追加変更してください。
*/
/* 投影マトリクス行列構造体 */
typedef struct {
Mtx projection;
Mtx modeling;
Mtx viewing;
Mtx line_mtx;
} Dynamic;
/*
ビュー構造体
*/
typedef struct {
float eye_x;
float eye_y;
float eye_z;
float at_x;
float at_y;
float at_z;
float up_x;
float up_y;
float up_z;
float pitch;
float yaw;
float roll;
float dist;
} CLookAt;
/* オブジェ座標の構造体 */
typedef struct {
float x; /* X位置 */
float y; /* Y位置 */
float z; /* Z位置 */
float roll; /* Z軸回転 */
float pitch; /* X軸回転 */
float yaw; /* Y軸回転 */
float size; /* 拡大率 */
} CPos;
/* モデルの構造体 */
typedef struct {
float pos_x;
float pos_y;
float pos_z;
float rot_x;
float rot_y;
float rot_z;
float size;
Mtx trans;
Mtx scale;
Mtx rotate;
} ModelMtx;
/* グラフィックタスクメッセージ構造体 */
typedef union {
struct {
short type;
} gen;
struct {
short type;
} done;
NNScMsg app;
} GFXMsg;
/*-------------------------------- parameter---------------------------------*/
extern u32 graphic_no;
extern Dynamic gfx_dynamic[];
extern OSMesgQueue *sched_gfxMQ;
extern OSMesgQueue gfx_msgQ;
extern Gfx* glist_ptr;
extern u32 gfx_cfbdrawbuffer;
extern u8* gfxdlist_buffer_ptr;
extern NNScTask gfx_task[];
extern Gfx gfx_dlist_buf[GFX_DLIST_BUF_NUM][GFX_DLIST_BUF_SIZE];
extern Gfx gfx_glist[GFX_GTASK_NUM][GFX_GLIST_LEN];
extern u32 gfx_gtask_no;
extern CLookAt lookat;
extern u32 pendingGFX ;
/*-------------------------------- function ---------------------------------*/
extern void gfxInit(u8*);
extern void gfxCreateGraphicThread(NNSched*);
extern short gfxWaitMessage(void);
extern void gfxTaskStart(NNScTask*, Gfx*, s32, u32, u32);
extern void gfxPositionF(float mf[4][4], CPos* );
extern void gfxPosition(Mtx* , CPos*);
extern void gfxTranslateF(float mf[4][4], CPos*);
extern void gfxTranslate(Mtx* , CPos*);
extern void gfxRCPInit(void);
extern void gfxClearCfb(void);
/*------------------------------- other extern define -----------------------*/
extern Gfx rdpstateinit_dl[];
extern Gfx setup_rdpstate[];
extern Gfx setup_rspstate[];
#endif /* _GRAPHIC_H_ */