citro3d  1.2.0
lightlut.h
Go to the documentation of this file.
1 #pragma once
2 #include "types.h"
3 #include <math.h>
4 
5 typedef struct
6 {
7  u32 data[256];
9 
10 typedef struct
11 {
13  float bias, scale;
15 
16 typedef float (* C3D_LightLutFunc)(float x, float param);
17 typedef float (* C3D_LightLutFuncDA)(float dist, float arg0, float arg1);
18 
19 static inline float quadratic_dist_attn(float dist, float linear, float quad)
20 {
21  return 1.0f / (1.0f + linear*dist + quad*dist*dist);
22 }
23 
24 static inline float spot_step(float angle, float cutoff)
25 {
26  return angle >= cutoff ? 1.0f : 0.0f;
27 }
28 
29 void LightLut_FromArray(C3D_LightLut* lut, float* data);
30 void LightLut_FromFunc(C3D_LightLut* lut, C3D_LightLutFunc func, float param, bool negative);
31 void LightLutDA_Create(C3D_LightLutDA* lut, C3D_LightLutFuncDA func, float from, float to, float arg0, float arg1);
32 
33 #define LightLut_Phong(lut, shininess) LightLut_FromFunc((lut), powf, (shininess), false)
34 #define LightLut_Spotlight(lut, angle) LightLut_FromFunc((lut), spot_step, cosf(angle), true)
35 #define LightLutDA_Quadratic(lut, from, to, linear, quad) LightLutDA_Create((lut), quadratic_dist_attn, (from), (to), (linear), (quad))
static float spot_step(float angle, float cutoff)
Definition: lightlut.h:24
float(* C3D_LightLutFunc)(float x, float param)
Definition: lightlut.h:16
void LightLut_FromFunc(C3D_LightLut *lut, C3D_LightLutFunc func, float param, bool negative)
Definition: lightlut.c:33
static float quadratic_dist_attn(float dist, float linear, float quad)
Definition: lightlut.h:19
void LightLut_FromArray(C3D_LightLut *lut, float *data)
Definition: lightlut.c:3
void LightLutDA_Create(C3D_LightLutDA *lut, C3D_LightLutFuncDA func, float from, float to, float arg0, float arg1)
Definition: lightlut.c:53
float(* C3D_LightLutFuncDA)(float dist, float arg0, float arg1)
Definition: lightlut.h:17
Definition: lightlut.h:11
C3D_LightLut lut
Definition: lightlut.h:12
float bias
Definition: lightlut.h:13
Definition: lightlut.h:6
float24Uniform_s * data
Definition: uniforms.c:16