Citro3d
Loading...
Searching...
No Matches
texenv.c
Go to the documentation of this file.
1#include "internal.h"
2
3C3D_TexEnv* C3D_GetTexEnv(int id)
4{
5 C3D_Context* ctx = C3Di_GetContext();
6
7 if (!(ctx->flags & C3DiF_Active))
8 return NULL;
9
10 ctx->flags |= C3DiF_TexEnv(id);
11 return &ctx->texEnv[id];
12}
13
14void C3D_SetTexEnv(int id, C3D_TexEnv* env)
15{
16 C3D_Context* ctx = C3Di_GetContext();
17
18 if (!(ctx->flags & C3DiF_Active))
19 return;
20
21 ctx->flags |= C3DiF_TexEnv(id);
22 if (env)
23 memcpy(&ctx->texEnv[id], env, sizeof(*env));
24 else
25 C3D_TexEnvInit(&ctx->texEnv[id]);
26}
27
28void C3D_DirtyTexEnv(C3D_TexEnv* env)
29{
30 C3D_Context* ctx = C3Di_GetContext();
31
32 if (!(ctx->flags & C3DiF_Active))
33 return;
34
35 u32 id = env-ctx->texEnv;
36 if (id < 6)
37 ctx->flags |= C3DiF_TexEnv(id);
38}
39
40void C3Di_TexEnvBind(int id, C3D_TexEnv* env)
41{
42 if (id >= 4) id += 2;
43 GPUCMD_AddIncrementalWrites(GPUREG_TEXENV0_SOURCE + id*8, (u32*)env, sizeof(C3D_TexEnv)/sizeof(u32));
44}
45
46void C3D_TexEnvBufUpdate(int mode, int mask)
47{
48 C3D_Context* ctx = C3Di_GetContext();
49
50 if (!(ctx->flags & C3DiF_Active))
51 return;
52
53 u32 val = ctx->texEnvBuf;
54 mask &= 0xF;
55
56 if (mode & C3D_RGB)
57 {
58 val &= ~(0xF << 8);
59 val |= mask << 8;
60 }
61
62 if (mode & C3D_Alpha)
63 {
64 val &= ~(0xF << 12);
65 val |= mask << 12;
66 }
67
68 ctx->texEnvBuf = val;
69 ctx->flags |= C3DiF_TexEnvBuf;
70}
71
72void C3D_TexEnvBufColor(u32 color)
73{
74 C3D_Context* ctx = C3Di_GetContext();
75
76 if (!(ctx->flags & C3DiF_Active))
77 return;
78
79 ctx->texEnvBufClr = color;
80 ctx->flags |= C3DiF_TexEnvBuf;
81}
@ C3DiF_Active
Definition: internal.h:75
@ C3DiF_TexEnvBuf
Definition: internal.h:84
#define C3DiF_TexEnv(n)
Definition: internal.h:99
u32 flags
Definition: internal.h:38
u32 texEnvBuf
Definition: internal.h:51
C3D_TexEnv texEnv[6]
Definition: internal.h:49
u32 texEnvBufClr
Definition: internal.h:51
C3D_TexEnv * C3D_GetTexEnv(int id)
Definition: texenv.c:3
void C3D_SetTexEnv(int id, C3D_TexEnv *env)
Definition: texenv.c:14
void C3D_TexEnvBufColor(u32 color)
Definition: texenv.c:72
void C3D_DirtyTexEnv(C3D_TexEnv *env)
Definition: texenv.c:28
void C3Di_TexEnvBind(int id, C3D_TexEnv *env)
Definition: texenv.c:40
void C3D_TexEnvBufUpdate(int mode, int mask)
Definition: texenv.c:46