diff --git a/include/c3d/light.h b/include/c3d/light.h index 3a477a1e..a32c4b92 100644 --- a/include/c3d/light.h +++ b/include/c3d/light.h @@ -77,6 +77,14 @@ enum void C3D_LightEnvFresnel(C3D_LightEnv* env, GPU_FRESNELSEL selector); void C3D_LightEnvBumpMode(C3D_LightEnv* env, GPU_BUMPMODE mode); void C3D_LightEnvBumpSel(C3D_LightEnv* env, int texUnit); + +/** + * @brief Configures whether to use the z component of the normal map. + * @param[out] env Pointer to light environment structure. + * @param[in] enable false if the z component is reconstructed from the xy components + * of the normal map, true if the z component is taken from the normal map. + */ +void C3D_LightEnvBumpNormalZ(C3D_LightEnv *env, bool enable); void C3D_LightEnvShadowMode(C3D_LightEnv* env, u32 mode); void C3D_LightEnvShadowSel(C3D_LightEnv* env, int texUnit); void C3D_LightEnvClampHighlights(C3D_LightEnv* env, bool clamp); diff --git a/source/lightenv.c b/source/lightenv.c index 25eea29a..afbe77da 100644 --- a/source/lightenv.c +++ b/source/lightenv.c @@ -250,6 +250,14 @@ void C3D_LightEnvBumpSel(C3D_LightEnv* env, int texUnit) env->flags |= C3DF_LightEnv_Dirty; } +void C3D_LightEnvBumpNormalZ(C3D_LightEnv *env, bool usez) { + if (usez) + env->conf.config[0] |= BIT(30); + else + env->conf.config[0] &= ~BIT(30); + env->flags |= C3DF_LightEnv_Dirty; +} + void C3D_LightEnvShadowMode(C3D_LightEnv* env, u32 mode) { mode &= 0xF<<16;