-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgSP.h
152 lines (131 loc) · 3.51 KB
/
gSP.h
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#ifndef GSP_H
#define GSP_H
#include "Types.h"
#include "GBI.h"
#include "gDP.h"
#define CHANGED_VIEWPORT 0x01
#define CHANGED_MATRIX 0x02
#define CHANGED_COLORBUFFER 0x04
#define CHANGED_GEOMETRYMODE 0x08
#define CHANGED_TEXTURE 0x10
#define CHANGED_FOGPOSITION 0x10
struct SPVertex
{
f32 x, y, z, w;
f32 nx, ny, nz;
f32 r, g, b, a;
f32 s, t;
f32 xClip, yClip, zClip;
s16 flag;
};
using SPTriangle = SPVertex[3];
struct gSPInfo
{
u32 segment[16];
struct
{
u32 modelViewi, stackSize, billboard;
f32 modelView[32][4][4];
f32 projection[4][4];
f32 combined[4][4];
} matrix;
struct
{
f32 A, B, C, D;
f32 X, Y;
f32 baseScaleX, baseScaleY;
} objMatrix;
SPVertex vertices[80];
u32 vertexColorBase;
u32 vertexi;
struct
{
f32 r, g, b;
f32 x, y, z;
} lights[8];
struct
{
f32 scales, scalet;
s32 level, on, tile;
} texture;
gDPTile* textureTile[2];
struct
{
f32 vscale[4];
f32 vtrans[4];
f32 x, y, width, height;
f32 nearz, farz;
} viewport;
struct
{
s16 multiplier, offset;
} fog;
struct
{
u32 address, width, height, format, size, palette;
} bgImage;
u32 geometryMode;
s32 numLights;
u32 changed;
u32 status[4];
struct
{
u32 vtx, mtx;
} DMAOffsets;
};
extern gSPInfo gSP;
void gSPLoadUcodeEx(u32 uc_start, u32 uc_dstart, u16 uc_dsize);
void gSPNoOp();
void gSPMatrix(u32 matrix, u8 param);
void gSPDMAMatrix(u32 matrix, u8 index, u8 multiply);
void gSPViewport(u32 v);
void gSPForceMatrix(u32 mptr);
void gSPLight(u32 l, s32 n);
void gSPLookAt(u32 l);
void gSPVertex(u32 v, u32 n, u32 v0);
void gSPCIVertex(u32 v, u32 n, u32 v0);
void gSPDMAVertex(u32 v, u32 n, u32 v0);
void gSPDisplayList(u32 dl);
void gSPDMADisplayList(u32 dl, u32 n);
void gSPBranchList(u32 dl);
void gSPBranchLessZ(u32 branchdl, u32 vtx, f32 zval);
void gSPSprite2DBase(u32 base);
void gSP1Triangle(s32 v0, s32 v1, s32 v2, s32 flag);
void gSP2Triangles(s32 v00, s32 v01, s32 v02, s32 flag0,
s32 v10, s32 v11, s32 v12, s32 flag1);
void gSP4Triangles(s32 v00, s32 v01, s32 v02,
s32 v10, s32 v11, s32 v12,
s32 v20, s32 v21, s32 v22,
s32 v30, s32 v31, s32 v32);
void gSPDMATriangles(u32 tris, u32 n);
void gSP1Quadrangle(s32 v0, s32 v1, s32 v2, s32 v4);
void gSPCullDisplayList(u32 v0, u32 vn);
void gSPPopMatrix(u32 param);
void gSPPopMatrixN(u32 param, u32 num);
void gSPSegment(s32 seg, s32 base);
void gSPClipRatio(u32 r);
void gSPInsertMatrix(u32 where, u32 num);
void gSPModifyVertex(u32 vtx, u32 where, u32 val);
void gSPNumLights(s32 n);
void gSPLightColor(u32 lightNum, u32 packedColor);
void gSPFogFactor(s16 fm, s16 fo);
void gSPPerspNormalize(u16 scale);
void gSPTexture(f32 sc, f32 tc, s32 level, s32 tile, s32 on);
void gSPEndDisplayList();
void gSPGeometryMode(u32 clear, u32 set);
void gSPSetGeometryMode(u32 mode);
void gSPClearGeometryMode(u32 mode);
void gSPLine3D(s32 v0, s32 v1, s32 flag);
void gSPLineW3D(s32 v0, s32 v1, s32 wd, s32 flag);
void gSPObjRectangle(u32 sp);
void gSPObjSprite(u32 sp);
void gSPObjLoadTxtr(u32 tx);
void gSPObjLoadTxSprite(u32 txsp);
void gSPObjLoadTxRectR(u32 txsp);
void gSPBgRect1Cyc(u32 bg);
void gSPBgRectCopy(u32 bg);
void gSPObjMatrix(u32 mtx);
void gSPObjSubMatrix(u32 mtx);
void gSPSetDMAOffsets(u32 mtxoffset, u32 vtxoffset);
void gSPSetVertexColorBase(u32 base);
#endif