From 7354976bca42d31b08a5c0adb1edd50c9d3abf52 Mon Sep 17 00:00:00 2001 From: fincs Date: Thu, 30 Mar 2017 23:42:29 +0200 Subject: [PATCH] Some tweaks to Spotlight support --- include/c3d/lightlut.h | 6 ++++++ source/lightenv.c | 1 + 2 files changed, 7 insertions(+) diff --git a/include/c3d/lightlut.h b/include/c3d/lightlut.h index b9e0a5b..5905ba9 100644 --- a/include/c3d/lightlut.h +++ b/include/c3d/lightlut.h @@ -21,9 +21,15 @@ static inline float quadratic_dist_attn(float dist, float linear, float quad) return 1.0f / (1.0f + linear*dist + quad*dist*dist); } +static inline float spot_step(float angle, float cutoff) +{ + return angle >= cutoff ? 1.0f : 0.0f; +} + void LightLut_FromArray(C3D_LightLut* lut, float* data); void LightLut_FromFunc(C3D_LightLut* lut, C3D_LightLutFunc func, float param, bool negative); void LightLutDA_Create(C3D_LightLutDA* lut, C3D_LightLutFuncDA func, float from, float to, float arg0, float arg1); #define LightLut_Phong(lut, shininess) LightLut_FromFunc((lut), powf, (shininess), false) +#define LightLut_Spotlight(lut, angle) LightLut_FromFunc((lut), spot_step, cosf(angle), true) #define LightLutDA_Quadratic(lut, from, to, linear, quad) LightLutDA_Create((lut), quadratic_dist_attn, (from), (to), (linear), (quad)) diff --git a/source/lightenv.c b/source/lightenv.c index 20ccdde..901abf0 100644 --- a/source/lightenv.c +++ b/source/lightenv.c @@ -155,6 +155,7 @@ void C3D_LightEnvInit(C3D_LightEnv* env) env->flags = C3DF_LightEnv_Dirty; env->conf.config[0] = (4<<8) | BIT(27) | BIT(31); env->conf.config[1] = ~0; + env->conf.lutInput.select = GPU_LIGHTLUTINPUT(GPU_LUT_SP, GPU_LUTINPUT_SP); env->conf.lutInput.abs = 0x2222222; }