3static inline u32 calc_diff(u32 a, u32 b,
int pos)
5 float fa = ((a>>pos)&0xFF)/255.0f;
6 float fb = ((b>>pos)&0xFF)/255.0f;
14 diff |= (u32)(x*0x7F);
18static inline u32 conv_u8(
float x,
int pos)
20 if (x < 0.0f) x = 0.0f;
21 else if (x > 1.0f) x = 1.0f;
22 return ((u32)x*255)<<pos;
25static inline u32 color_diff(u32 a, u32 b)
27 return calc_diff(a,b,0) | calc_diff(a,b,8) | calc_diff(a,b,16);
33 for (i = 0; i <= 8; i ++)
36 lut->color[i] =
data[i];
38 lut->diff[i-1] = color_diff(
data[i-1],
data[i]);
96 ctx->
gasLightXY = conv_u8(min,0) | conv_u8(max,8) | conv_u8(attn,16);
108 ctx->
gasLightZ = conv_u8(min,0) | conv_u8(max,8) | conv_u8(attn,16);
150 ctx->
flags &= ~C3DiF_GasLut;
157 ctx->
flags &= ~C3DiF_Gas;
162 GPUCMD_AddMaskedWrite(GPUREG_GAS_ACCMAX_FEEDBACK, 0x3, 0);
164 GPUCMD_AddMaskedWrite(GPUREG_GAS_DELTAZ_DEPTH, 0x7, ctx->
gasDeltaZ);
166 GPUCMD_AddWrite(GPUREG_GAS_ACCMAX, ctx->
gasAccMax);
169 GPUCMD_AddWrite(GPUREG_GAS_ATTENUATION, ctx->
gasAttn);
170 GPUCMD_AddWrite(GPUREG_GAS_LIGHT_XY, ctx->
gasLightXY);
171 GPUCMD_AddWrite(GPUREG_GAS_LIGHT_Z, ctx->
gasLightZ);
177 ctx->
flags &= ~C3DiF_GasLut;
180 GPUCMD_AddWrite(GPUREG_GAS_LUT_INDEX, 0);
181 GPUCMD_AddWrites(GPUREG_GAS_LUT_DATA, (u32*)ctx->
gasLut, 16);
void C3D_GasLutInput(GPU_GASLUTINPUT input)
void C3D_GasLightPlanar(float min, float max, float attn)
void C3D_GasDeltaZ(float value)
void C3D_GasLightView(float min, float max, float attn)
void C3D_GasAccMax(float value)
void C3D_GasAttn(float value)
void C3D_GasBeginAcc(void)
void C3Di_GasUpdate(C3D_Context *ctx)
void GasLut_FromArray(C3D_GasLut *lut, const u32 data[9])
void C3D_GasLutBind(C3D_GasLut *lut)
void C3D_GasLightDirection(float dotp)