citro3d  1.2.0
proctex.h
Go to the documentation of this file.
1 #pragma once
2 #include "types.h"
3 
4 typedef struct
5 {
6  u32 color[256];
7  u32 diff[256];
9 
10 typedef struct
11 {
12  union
13  {
14  u32 proctex0;
15  struct
16  {
17  u32 uClamp : 3;
18  u32 vClamp : 3;
19  u32 rgbFunc : 4;
20  u32 alphaFunc : 4;
21  bool alphaSeparate : 1;
22  bool enableNoise : 1;
23  u32 uShift : 2;
24  u32 vShift : 2;
25  u32 lodBiasLow : 8;
26  };
27  };
28  union
29  {
30  u32 proctex1;
31  struct
32  {
35  };
36  };
37  union
38  {
39  u32 proctex2;
40  struct
41  {
44  };
45  };
46  union
47  {
48  u32 proctex3;
49  struct
50  {
53  };
54  };
55  union
56  {
57  u32 proctex4;
58  struct
59  {
60  u32 minFilter : 3;
61  u32 unknown1 : 8;
62  u32 width : 8;
63  u32 lodBiasHigh : 8;
64  };
65  };
66  union
67  {
68  u32 proctex5;
69  struct
70  {
71  u32 offset : 8;
72  u32 unknown2 : 24;
73  };
74  };
75 } C3D_ProcTex;
76 
77 enum
78 {
79  C3D_ProcTex_U = BIT(0),
80  C3D_ProcTex_V = BIT(1),
82 };
83 
84 void C3D_ProcTexInit(C3D_ProcTex* pt, int offset, int length);
85 void C3D_ProcTexNoiseCoefs(C3D_ProcTex* pt, int mode, float amplitude, float frequency, float phase);
86 void C3D_ProcTexLodBias(C3D_ProcTex* pt, float bias);
87 void C3D_ProcTexBind(int texCoordId, C3D_ProcTex* pt);
88 
89 // GPU_LUT_NOISE, GPU_LUT_RGBMAP, GPU_LUT_ALPHAMAP
90 typedef u32 C3D_ProcTexLut[128];
91 void C3D_ProcTexLutBind(GPU_PROCTEX_LUTID id, C3D_ProcTexLut* lut);
92 void ProcTexLut_FromArray(C3D_ProcTexLut* lut, const float in[129]);
93 
95 void ProcTexColorLut_Write(C3D_ProcTexColorLut* out, const u32* in, int offset, int length);
96 
97 static inline void C3D_ProcTexClamp(C3D_ProcTex* pt, GPU_PROCTEX_CLAMP u, GPU_PROCTEX_CLAMP v)
98 {
99  pt->uClamp = u;
100  pt->vClamp = v;
101 }
102 
103 static inline void C3D_ProcTexCombiner(C3D_ProcTex* pt, bool separate, GPU_PROCTEX_MAPFUNC rgb, GPU_PROCTEX_MAPFUNC alpha)
104 {
105  pt->alphaSeparate = separate;
106  pt->rgbFunc = rgb;
107  if (separate)
108  pt->alphaFunc = alpha;
109 }
110 
111 static inline void C3D_ProcTexNoiseEnable(C3D_ProcTex* pt, bool enable)
112 {
113  pt->enableNoise = enable;
114 }
115 
116 static inline void C3D_ProcTexShift(C3D_ProcTex* pt, GPU_PROCTEX_SHIFT u, GPU_PROCTEX_SHIFT v)
117 {
118  pt->uShift = u;
119  pt->vShift = v;
120 }
121 
122 static inline void C3D_ProcTexFilter(C3D_ProcTex* pt, GPU_PROCTEX_FILTER min)
123 {
124  pt->minFilter = min;
125 }
static void C3D_ProcTexNoiseEnable(C3D_ProcTex *pt, bool enable)
Definition: proctex.h:111
void ProcTexColorLut_Write(C3D_ProcTexColorLut *out, const u32 *in, int offset, int length)
Definition: proctex.c:127
void C3D_ProcTexColorLutBind(C3D_ProcTexColorLut *lut)
Definition: proctex.c:105
void C3D_ProcTexLutBind(GPU_PROCTEX_LUTID id, C3D_ProcTexLut *lut)
Definition: proctex.c:68
u32 C3D_ProcTexLut[128]
Definition: proctex.h:90
void ProcTexLut_FromArray(C3D_ProcTexLut *lut, const float in[129])
Definition: proctex.c:93
void C3D_ProcTexInit(C3D_ProcTex *pt, int offset, int length)
Definition: proctex.c:3
static void C3D_ProcTexClamp(C3D_ProcTex *pt, GPU_PROCTEX_CLAMP u, GPU_PROCTEX_CLAMP v)
Definition: proctex.h:97
void C3D_ProcTexLodBias(C3D_ProcTex *pt, float bias)
Definition: proctex.c:32
void C3D_ProcTexBind(int texCoordId, C3D_ProcTex *pt)
Definition: proctex.c:39
static void C3D_ProcTexFilter(C3D_ProcTex *pt, GPU_PROCTEX_FILTER min)
Definition: proctex.h:122
static void C3D_ProcTexShift(C3D_ProcTex *pt, GPU_PROCTEX_SHIFT u, GPU_PROCTEX_SHIFT v)
Definition: proctex.h:116
@ C3D_ProcTex_V
Definition: proctex.h:80
@ C3D_ProcTex_UV
Definition: proctex.h:81
@ C3D_ProcTex_U
Definition: proctex.h:79
void C3D_ProcTexNoiseCoefs(C3D_ProcTex *pt, int mode, float amplitude, float frequency, float phase)
Definition: proctex.c:12
static void C3D_ProcTexCombiner(C3D_ProcTex *pt, bool separate, GPU_PROCTEX_MAPFUNC rgb, GPU_PROCTEX_MAPFUNC alpha)
Definition: proctex.h:103
Definition: proctex.h:5
Definition: proctex.h:11
u32 vClamp
Definition: proctex.h:18
u32 alphaFunc
Definition: proctex.h:20
bool alphaSeparate
Definition: proctex.h:21
u16 vNoisePhase
Definition: proctex.h:43
u16 uNoiseFreq
Definition: proctex.h:51
u32 proctex3
Definition: proctex.h:48
bool enableNoise
Definition: proctex.h:22
u32 width
Definition: proctex.h:62
u32 proctex2
Definition: proctex.h:39
u32 lodBiasHigh
Definition: proctex.h:63
u32 uClamp
Definition: proctex.h:17
u32 uShift
Definition: proctex.h:23
u32 unknown1
Definition: proctex.h:61
u16 vNoiseFreq
Definition: proctex.h:52
u16 vNoiseAmpl
Definition: proctex.h:42
u32 proctex1
Definition: proctex.h:30
u32 proctex4
Definition: proctex.h:57
u32 offset
Definition: proctex.h:71
u32 proctex5
Definition: proctex.h:68
u16 uNoiseAmpl
Definition: proctex.h:33
u32 unknown2
Definition: proctex.h:72
u32 minFilter
Definition: proctex.h:60
u32 lodBiasLow
Definition: proctex.h:25
u16 uNoisePhase
Definition: proctex.h:34
u32 vShift
Definition: proctex.h:24
u32 proctex0
Definition: proctex.h:14
u32 rgbFunc
Definition: proctex.h:19