NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
vi.h
1#ifndef RVL_SDK_VI_H
2#define RVL_SDK_VI_H
3#include <types.h>
4
5#include <revolution/GX.h>
6#ifdef __cplusplus
7extern "C" {
8#endif
9
10// Merge format/scanmode to one value for TV mode (see GXRenderModeObj)
11#define VI_TVMODE(format, scanMode) (((format) << 2) + (scanMode))
12
13// Get TV format from TV mode
14#define VI_TVMODE_FORMAT(mode) ((mode) >> 2)
15// Get TV scan mode from TV mode
16#define VI_TVMODE_SCANMODE(mode) ((mode) & 0b00000011)
17
18#define VI_VIRTUAL_WIDTH_STD (608.0f)
19#define VI_VIRTUAL_WIDTH_WIDE (832.0f)
20#define VI_VIRTUAL_HEIGHT (456.0f)
21
22#define VI_VIRTUAL_HALF_WIDTH_STD (VI_VIRTUAL_WIDTH_STD / 2)
23#define VI_VIRTUAL_HALF_WIDTH_WIDE (VI_VIRTUAL_WIDTH_WIDE / 2)
24#define VI_VIRTUAL_HALF_HEIGHT (VI_VIRTUAL_HEIGHT / 2)
25
26typedef enum {
27 VI_TVFORMAT_NTSC,
28 VI_TVFORMAT_PAL,
29 VI_TVFORMAT_MPAL,
30 VI_TVFORMAT_DEBUG,
31 VI_TVFORMAT_DEBUG_PAL,
32 VI_TVFORMAT_EURGB60
33} VITVFormat;
34
35typedef enum VIScanMode {
36 VI_SCANMODE_INT,
37 VI_SCANMODE_DS,
38 VI_SCANMODE_PROG
39} VIScanMode;
40
41typedef enum VIXFBMode {
42 VI_XFBMODE_SF,
43 VI_XFBMODE_DF,
44} VIXFBMode;
45
46typedef enum VITVMode {
47 VI_TVMODE_NTSC_INT = VI_TVMODE(VI_TVFORMAT_NTSC, VI_SCANMODE_INT),
48 VI_TVMODE_NTSC_DS = VI_TVMODE(VI_TVFORMAT_NTSC, VI_SCANMODE_DS),
49 VI_TVMODE_NTSC_PROG = VI_TVMODE(VI_TVFORMAT_NTSC, VI_SCANMODE_PROG),
50
51 VI_TVMODE_PAL_INT = VI_TVMODE(VI_TVFORMAT_PAL, VI_SCANMODE_INT),
52 VI_TVMODE_PAL_DS = VI_TVMODE(VI_TVFORMAT_PAL, VI_SCANMODE_DS),
53
54 VI_TVMODE_EURGB60_INT = VI_TVMODE(VI_TVFORMAT_EURGB60, VI_SCANMODE_INT),
55 VI_TVMODE_EURGB60_DS = VI_TVMODE(VI_TVFORMAT_EURGB60, VI_SCANMODE_DS),
56 VI_TVMODE_EURGB60_PROG = VI_TVMODE(VI_TVFORMAT_EURGB60, VI_SCANMODE_PROG),
57
58 VI_TVMODE_MPAL_INT = VI_TVMODE(VI_TVFORMAT_MPAL, VI_SCANMODE_INT),
59 VI_TVMODE_MPAL_DS = VI_TVMODE(VI_TVFORMAT_MPAL, VI_SCANMODE_DS),
60 VI_TVMODE_MPAL_PROG = VI_TVMODE(VI_TVFORMAT_MPAL, VI_SCANMODE_PROG),
61
62 VI_TVMODE_DEBUG_INT = VI_TVMODE(VI_TVFORMAT_DEBUG, VI_SCANMODE_INT),
63
64 VI_TVMODE_DEBUG_PAL_INT = VI_TVMODE(VI_TVFORMAT_DEBUG_PAL, VI_SCANMODE_INT),
65 VI_TVMODE_DEBUG_PAL_DS = VI_TVMODE(VI_TVFORMAT_DEBUG_PAL, VI_SCANMODE_DS),
66} VITVMode;
67
68typedef void (*VIRetraceCallback)(u32 retraceCount);
69typedef void (*VIPositionCallback)(s16 displayX, s16 displayY);
70
71VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback callback);
72VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback);
73
74void VIInit(void);
75void VIWaitForRetrace(void);
76
77void VIConfigure(const GXRenderModeObj* rmo);
78void VIConfigurePan(u16 x, u16 y, u16 w, u16 h);
79void VIFlush(void);
80
81void VISetNextFrameBuffer(void* fb);
82void* VIGetCurrentFrameBuffer(void);
83
84void VISetBlack(BOOL black);
85s32 VIGetRetraceCount(void);
86
87VITVFormat VIGetTvFormat(void);
88VIScanMode VIGetScanMode(void);
89u32 VIGetDTVStatus(void);
90
91#ifdef __cplusplus
92}
93#endif
94#endif