summaryrefslogtreecommitdiff
path: root/include/z64vis.h
blob: 46071a1e9a22a6bfa772bd46765eedcd0c177b29 (plain)
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
#ifndef Z64_VIS_H
#define Z64_VIS_H

#include "ultra64.h"
#include "color.h"

typedef enum FramebufferFilterType {
    /* 0 */ FB_FILTER_NONE,
    /* 1 */ FB_FILTER_CVG_RGB,
    /* 2 */ FB_FILTER_CVG_RGB_UNIFORM,
    /* 3 */ FB_FILTER_CVG_ONLY,
    /* 4 */ FB_FILTER_CVG_RGB_FOG, // Not recommended, easily overflows blender
    /* 5 */ FB_FILTER_ZBUF_IA,
    /* 6 */ FB_FILTER_ZBUF_RGBA,
    /* 7 */ FB_FILTER_MONO
} FramebufferFilterType;

typedef enum VisScissorType {
    /* 0 */ VIS_NO_SETSCISSOR,
    /* 1 */ VIS_SETSCISSOR
} VisScissorType;

typedef struct Vis {
    /* 0x0 */ u32 type;
    /* 0x4 */ u32 scissorType;
    /* 0x8 */ Color_RGBA8_u32 primColor;
    /* 0xC */ Color_RGBA8_u32 envColor;
} Vis; // size = 0x10



/* Cvg: Coverage */

#define FB_FILTER_TO_CVG_TYPE(filter) (filter)

typedef enum VisCvgType {
    /* 0 */ VIS_CVG_TYPE_NONE = FB_FILTER_TO_CVG_TYPE(FB_FILTER_NONE),
    /* 1 */ VIS_CVG_TYPE_CVG_RGB = FB_FILTER_TO_CVG_TYPE(FB_FILTER_CVG_RGB),
    /* 2 */ VIS_CVG_TYPE_CVG_RGB_UNIFORM = FB_FILTER_TO_CVG_TYPE(FB_FILTER_CVG_RGB_UNIFORM),
    /* 3 */ VIS_CVG_TYPE_CVG_ONLY = FB_FILTER_TO_CVG_TYPE(FB_FILTER_CVG_ONLY),
    /* 4 */ VIS_CVG_TYPE_CVG_RGB_FOG = FB_FILTER_TO_CVG_TYPE(FB_FILTER_CVG_RGB_FOG)
} VisCvgType;

typedef struct VisCvg {
    /* 0x0 */ Vis vis;
} VisCvg; // size = 0x10

void VisCvg_Init(VisCvg* this);
void VisCvg_Destroy(VisCvg* this);
void VisCvg_Draw(VisCvg* this, Gfx** gfxP);



/* Mono: Desaturation */

// Only one type

typedef struct VisMono {
    /* 0x00 */ Vis vis;
    /* 0x10 */ u16* tlut;
    /* 0x14 */ Gfx* dList;
} VisMono; // size = 0x18

void VisMono_Init(VisMono* this);
void VisMono_Destroy(VisMono* this);
void VisMono_Draw(VisMono* this, Gfx** gfxP);



/* ZBuf: Z-Buffer */

#define FB_FILTER_TO_ZBUF_TYPE(filter) ((filter) - FB_FILTER_ZBUF_IA)

typedef enum VisZBufType {
    /* 0 */ VIS_ZBUF_TYPE_IA = FB_FILTER_TO_ZBUF_TYPE(FB_FILTER_ZBUF_IA),
    /* 1 */ VIS_ZBUF_TYPE_RGBA = FB_FILTER_TO_ZBUF_TYPE(FB_FILTER_ZBUF_RGBA)
} VisZBufType;

typedef struct VisZBuf {
    /* 0x0 */ Vis vis;
} VisZBuf; // size = 0x10

void VisZBuf_Init(VisZBuf* this);
void VisZBuf_Destroy(VisZBuf* this);
void VisZBuf_Draw(VisZBuf* this, Gfx** gfxP, void* zbuffer);

#endif