citro3d  1.2.0
texenv.h
Go to the documentation of this file.
1 #pragma once
2 #include "types.h"
3 
4 typedef struct
5 {
6  u16 srcRgb, srcAlpha;
7  union
8  {
9  u32 opAll;
10  struct { u32 opRgb:12, opAlpha:12; };
11  };
12  u16 funcRgb, funcAlpha;
13  u32 color;
14  u16 scaleRgb, scaleAlpha;
15 } C3D_TexEnv;
16 
17 typedef enum
18 {
19  C3D_RGB = BIT(0),
20  C3D_Alpha = BIT(1),
23 
24 C3D_TexEnv* C3D_GetTexEnv(int id);
25 void C3D_SetTexEnv(int id, C3D_TexEnv* env);
26 void C3D_DirtyTexEnv(C3D_TexEnv* env);
27 
28 void C3D_TexEnvBufUpdate(int mode, int mask);
29 void C3D_TexEnvBufColor(u32 color);
30 
31 static inline void C3D_TexEnvInit(C3D_TexEnv* env)
32 {
33  env->srcRgb = GPU_TEVSOURCES(GPU_PREVIOUS, 0, 0);
34  env->srcAlpha = env->srcRgb;
35  env->opAll = 0;
36  env->funcRgb = GPU_REPLACE;
37  env->funcAlpha = env->funcRgb;
38  env->color = 0xFFFFFFFF;
39  env->scaleRgb = GPU_TEVSCALE_1;
40  env->scaleAlpha = GPU_TEVSCALE_1;
41 }
42 
43 #ifdef __cplusplus
44 #define _C3D_DEFAULT(x) = x
45 #else
46 #define _C3D_DEFAULT(x)
47 #endif
48 
49 static inline void C3D_TexEnvSrc(C3D_TexEnv* env, C3D_TexEnvMode mode,
50  GPU_TEVSRC s1,
51  GPU_TEVSRC s2 _C3D_DEFAULT(GPU_PRIMARY_COLOR),
52  GPU_TEVSRC s3 _C3D_DEFAULT(GPU_PRIMARY_COLOR))
53 {
54  int param = GPU_TEVSOURCES((int)s1, (int)s2, (int)s3);
55  if ((int)mode & C3D_RGB)
56  env->srcRgb = param;
57  if ((int)mode & C3D_Alpha)
58  env->srcAlpha = param;
59 }
60 
61 static inline void C3D_TexEnvOpRgb(C3D_TexEnv* env,
62  GPU_TEVOP_RGB o1,
63  GPU_TEVOP_RGB o2 _C3D_DEFAULT(GPU_TEVOP_RGB_SRC_COLOR),
64  GPU_TEVOP_RGB o3 _C3D_DEFAULT(GPU_TEVOP_RGB_SRC_COLOR))
65 {
66  env->opRgb = GPU_TEVOPERANDS((int)o1, (int)o2, (int)o3);
67 }
68 
69 static inline void C3D_TexEnvOpAlpha(C3D_TexEnv* env,
70  GPU_TEVOP_A o1,
71  GPU_TEVOP_A o2 _C3D_DEFAULT(GPU_TEVOP_A_SRC_ALPHA),
72  GPU_TEVOP_A o3 _C3D_DEFAULT(GPU_TEVOP_A_SRC_ALPHA))
73 {
74  env->opAlpha = GPU_TEVOPERANDS((int)o1, (int)o2, (int)o3);
75 }
76 
77 static inline void C3D_TexEnvFunc(C3D_TexEnv* env, C3D_TexEnvMode mode, GPU_COMBINEFUNC param)
78 {
79  if ((int)mode & C3D_RGB)
80  env->funcRgb = param;
81  if ((int)mode & C3D_Alpha)
82  env->funcAlpha = param;
83 }
84 
85 static inline void C3D_TexEnvColor(C3D_TexEnv* env, u32 color)
86 {
87  env->color = color;
88 }
89 
90 static inline void C3D_TexEnvScale(C3D_TexEnv* env, int mode, GPU_TEVSCALE param)
91 {
92  if (mode & C3D_RGB)
93  env->scaleRgb = param;
94  if (mode & C3D_Alpha)
95  env->scaleAlpha = param;
96 }
97 
98 #undef _C3D_DEFAULT
Definition: texenv.h:5
u16 scaleRgb
Definition: texenv.h:14
u16 funcAlpha
Definition: texenv.h:12
u16 funcRgb
Definition: texenv.h:12
u16 scaleAlpha
Definition: texenv.h:14
u32 opAlpha
Definition: texenv.h:10
u32 opAll
Definition: texenv.h:9
u16 srcRgb
Definition: texenv.h:6
u32 color
Definition: texenv.h:13
u32 opRgb
Definition: texenv.h:10
u16 srcAlpha
Definition: texenv.h:6
void C3D_SetTexEnv(int id, C3D_TexEnv *env)
Definition: texenv.c:14
static void C3D_TexEnvColor(C3D_TexEnv *env, u32 color)
Definition: texenv.h:85
void C3D_TexEnvBufColor(u32 color)
Definition: texenv.c:72
C3D_TexEnv * C3D_GetTexEnv(int id)
Definition: texenv.c:3
static void C3D_TexEnvFunc(C3D_TexEnv *env, C3D_TexEnvMode mode, GPU_COMBINEFUNC param)
Definition: texenv.h:77
void C3D_DirtyTexEnv(C3D_TexEnv *env)
Definition: texenv.c:28
static void C3D_TexEnvScale(C3D_TexEnv *env, int mode, GPU_TEVSCALE param)
Definition: texenv.h:90
static void C3D_TexEnvSrc(C3D_TexEnv *env, C3D_TexEnvMode mode, GPU_TEVSRC s1, GPU_TEVSRC s2 _C3D_DEFAULT(GPU_PRIMARY_COLOR), GPU_TEVSRC s3 _C3D_DEFAULT(GPU_PRIMARY_COLOR))
Definition: texenv.h:49
static void C3D_TexEnvOpAlpha(C3D_TexEnv *env, GPU_TEVOP_A o1, GPU_TEVOP_A o2 _C3D_DEFAULT(GPU_TEVOP_A_SRC_ALPHA), GPU_TEVOP_A o3 _C3D_DEFAULT(GPU_TEVOP_A_SRC_ALPHA))
Definition: texenv.h:69
static void C3D_TexEnvInit(C3D_TexEnv *env)
Definition: texenv.h:31
C3D_TexEnvMode
Definition: texenv.h:18
@ C3D_RGB
Definition: texenv.h:19
@ C3D_Both
Definition: texenv.h:21
@ C3D_Alpha
Definition: texenv.h:20
static void C3D_TexEnvOpRgb(C3D_TexEnv *env, GPU_TEVOP_RGB o1, GPU_TEVOP_RGB o2 _C3D_DEFAULT(GPU_TEVOP_RGB_SRC_COLOR), GPU_TEVOP_RGB o3 _C3D_DEFAULT(GPU_TEVOP_RGB_SRC_COLOR))
Definition: texenv.h:61
void C3D_TexEnvBufUpdate(int mode, int mask)
Definition: texenv.c:46
#define _C3D_DEFAULT(x)
Definition: texenv.h:46