citro3d  1.2.0
uniforms.h
Go to the documentation of this file.
1 #pragma once
2 #include "maths.h"
3 
4 #define C3D_FVUNIF_COUNT 96
5 #define C3D_IVUNIF_COUNT 4
6 
9 extern u16 C3D_BoolUnifs[2];
10 
11 extern bool C3D_FVUnifDirty[2][C3D_FVUNIF_COUNT];
12 extern bool C3D_IVUnifDirty[2][C3D_IVUNIF_COUNT];
13 extern bool C3D_BoolUnifsDirty[2];
14 
15 static inline C3D_FVec* C3D_FVUnifWritePtr(GPU_SHADER_TYPE type, int id, int size)
16 {
17  int i;
18  for (i = 0; i < size; i ++)
19  C3D_FVUnifDirty[type][id+i] = true;
20  return &C3D_FVUnif[type][id];
21 }
22 
23 static inline C3D_IVec* C3D_IVUnifWritePtr(GPU_SHADER_TYPE type, int id)
24 {
25  id -= 0x60;
26  C3D_IVUnifDirty[type][id] = true;
27  return &C3D_IVUnif[type][id];
28 }
29 
30 static inline void C3D_FVUnifMtxNx4(GPU_SHADER_TYPE type, int id, const C3D_Mtx* mtx, int num)
31 {
32  int i;
33  C3D_FVec* ptr = C3D_FVUnifWritePtr(type, id, num);
34  for (i = 0; i < num; i ++)
35  ptr[i] = mtx->r[i]; // Struct copy.
36 }
37 
38 static inline void C3D_FVUnifMtx4x4(GPU_SHADER_TYPE type, int id, const C3D_Mtx* mtx)
39 {
40  C3D_FVUnifMtxNx4(type, id, mtx, 4);
41 }
42 
43 static inline void C3D_FVUnifMtx3x4(GPU_SHADER_TYPE type, int id, const C3D_Mtx* mtx)
44 {
45  C3D_FVUnifMtxNx4(type, id, mtx, 3);
46 }
47 
48 static inline void C3D_FVUnifMtx2x4(GPU_SHADER_TYPE type, int id, const C3D_Mtx* mtx)
49 {
50  C3D_FVUnifMtxNx4(type, id, mtx, 2);
51 }
52 
53 static inline void C3D_FVUnifSet(GPU_SHADER_TYPE type, int id, float x, float y, float z, float w)
54 {
55  C3D_FVec* ptr = C3D_FVUnifWritePtr(type, id, 1);
56  ptr->x = x;
57  ptr->y = y;
58  ptr->z = z;
59  ptr->w = w;
60 }
61 
62 static inline void C3D_IVUnifSet(GPU_SHADER_TYPE type, int id, int x, int y, int z, int w)
63 {
64  C3D_IVec* ptr = C3D_IVUnifWritePtr(type, id);
65  *ptr = IVec_Pack(x, y, z, w);
66 }
67 
68 static inline void C3D_BoolUnifSet(GPU_SHADER_TYPE type, int id, bool value)
69 {
70  id -= 0x68;
71  C3D_BoolUnifsDirty[type] = true;
72  if (value)
73  C3D_BoolUnifs[type] |= BIT(id);
74  else
75  C3D_BoolUnifs[type] &= ~BIT(id);
76 }
77 
78 void C3D_UpdateUniforms(GPU_SHADER_TYPE type);
static C3D_IVec IVec_Pack(u8 x, u8 y, u8 z, u8 w)
Definition: types.h:19
u32 C3D_IVec
Definition: types.h:17
bool C3D_FVUnifDirty[2][C3D_FVUNIF_COUNT]
Definition: uniforms.c:8
u16 C3D_BoolUnifs[2]
Definition: uniforms.c:6
static void C3D_BoolUnifSet(GPU_SHADER_TYPE type, int id, bool value)
Definition: uniforms.h:68
static C3D_FVec * C3D_FVUnifWritePtr(GPU_SHADER_TYPE type, int id, int size)
Definition: uniforms.h:15
#define C3D_IVUNIF_COUNT
Definition: uniforms.h:5
C3D_FVec C3D_FVUnif[2][C3D_FVUNIF_COUNT]
Definition: uniforms.c:4
static C3D_IVec * C3D_IVUnifWritePtr(GPU_SHADER_TYPE type, int id)
Definition: uniforms.h:23
static void C3D_FVUnifMtxNx4(GPU_SHADER_TYPE type, int id, const C3D_Mtx *mtx, int num)
Definition: uniforms.h:30
static void C3D_FVUnifSet(GPU_SHADER_TYPE type, int id, float x, float y, float z, float w)
Definition: uniforms.h:53
static void C3D_IVUnifSet(GPU_SHADER_TYPE type, int id, int x, int y, int z, int w)
Definition: uniforms.h:62
static void C3D_FVUnifMtx2x4(GPU_SHADER_TYPE type, int id, const C3D_Mtx *mtx)
Definition: uniforms.h:48
bool C3D_IVUnifDirty[2][C3D_IVUNIF_COUNT]
Definition: uniforms.c:9
bool C3D_BoolUnifsDirty[2]
Definition: uniforms.c:10
#define C3D_FVUNIF_COUNT
Definition: uniforms.h:4
C3D_IVec C3D_IVUnif[2][C3D_IVUNIF_COUNT]
Definition: uniforms.c:5
static void C3D_FVUnifMtx4x4(GPU_SHADER_TYPE type, int id, const C3D_Mtx *mtx)
Definition: uniforms.h:38
static void C3D_FVUnifMtx3x4(GPU_SHADER_TYPE type, int id, const C3D_Mtx *mtx)
Definition: uniforms.h:43
void C3D_UpdateUniforms(GPU_SHADER_TYPE type)
Definition: uniforms.c:22
Float vector.
Definition: types.h:37
float x
X-component.
Definition: types.h:46
float z
Z-component.
Definition: types.h:44
float w
W-component.
Definition: types.h:43
float y
Y-component.
Definition: types.h:45
Row-major 4x4 matrix.
Definition: types.h:77
C3D_FVec r[4]
Rows are vectors.
Definition: types.h:78