Review rlights helper module #1489
This commit is contained in:
parent
9ed29725a0
commit
22b179e66c
2 changed files with 34 additions and 33 deletions
|
@ -11,7 +11,7 @@
|
||||||
*
|
*
|
||||||
* LICENSE: zlib/libpng
|
* LICENSE: zlib/libpng
|
||||||
*
|
*
|
||||||
* Copyright (c) 2017 Victor Fisac and Ramon Santamaria
|
* Copyright (c) 2017-2020 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
* This software is provided "as-is", without any express or implied warranty. In no event
|
||||||
* will the authors be held liable for any damages arising from the use of this software.
|
* will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
@ -36,24 +36,21 @@
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Defines and Macros
|
// Defines and Macros
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
#define MAX_LIGHTS 4 // Max lights supported by shader
|
#define MAX_LIGHTS 4 // Max dynamic lights supported by shader
|
||||||
#define LIGHT_DISTANCE 3.5f // Light distance from world center
|
|
||||||
#define LIGHT_HEIGHT 1.0f // Light height position
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Types and Structures Definition
|
// Types and Structures Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
typedef enum {
|
|
||||||
LIGHT_DIRECTIONAL,
|
|
||||||
LIGHT_POINT
|
|
||||||
} LightType;
|
|
||||||
|
|
||||||
typedef struct {
|
// Light data
|
||||||
bool enabled;
|
typedef struct {
|
||||||
LightType type;
|
int type;
|
||||||
Vector3 position;
|
Vector3 position;
|
||||||
Vector3 target;
|
Vector3 target;
|
||||||
Color color;
|
Color color;
|
||||||
|
bool enabled;
|
||||||
|
|
||||||
|
// Shader locations
|
||||||
int enabledLoc;
|
int enabledLoc;
|
||||||
int typeLoc;
|
int typeLoc;
|
||||||
int posLoc;
|
int posLoc;
|
||||||
|
@ -61,20 +58,21 @@ typedef struct {
|
||||||
int colorLoc;
|
int colorLoc;
|
||||||
} Light;
|
} Light;
|
||||||
|
|
||||||
|
// Light type
|
||||||
|
typedef enum {
|
||||||
|
LIGHT_DIRECTIONAL,
|
||||||
|
LIGHT_POINT
|
||||||
|
} LightType;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" { // Prevents name mangling of functions
|
extern "C" { // Prevents name mangling of functions
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Global Variables Definition
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
int lightsCount = 0; // Current amount of created lights
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module Functions Declaration
|
// Module Functions Declaration
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
Light CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shader); // Defines a light and get locations from PBR shader
|
Light CreateLight(int type, Vector3 position, Vector3 target, Color color, Shader shader); // Create a light and get shader locations
|
||||||
void UpdateLightValues(Shader shader, Light light); // Send to PBR shader light values
|
void UpdateLightValues(Shader shader, Light light); // Send light properties to shader
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -106,7 +104,7 @@ void UpdateLightValues(Shader shader, Light light);
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Global Variables Definition
|
// Global Variables Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// ...
|
static int lightsCount = 0; // Current amount of created lights
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module specific Functions Declaration
|
// Module specific Functions Declaration
|
||||||
|
@ -117,8 +115,8 @@ void UpdateLightValues(Shader shader, Light light);
|
||||||
// Module Functions Definition
|
// Module Functions Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Defines a light and get locations from PBR shader
|
// Create a light and get shader locations
|
||||||
Light CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shader)
|
Light CreateLight(int type, Vector3 position, Vector3 target, Color color, Shader shader)
|
||||||
{
|
{
|
||||||
Light light = { 0 };
|
Light light = { 0 };
|
||||||
|
|
||||||
|
@ -126,15 +124,20 @@ Light CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shade
|
||||||
{
|
{
|
||||||
light.enabled = true;
|
light.enabled = true;
|
||||||
light.type = type;
|
light.type = type;
|
||||||
light.position = pos;
|
light.position = position;
|
||||||
light.target = targ;
|
light.target = target;
|
||||||
light.color = color;
|
light.color = color;
|
||||||
|
|
||||||
|
// TODO: Below code doesn't look good to me,
|
||||||
|
// it assumes a specific shader naming and structure
|
||||||
|
// Probably this implementation could be improved
|
||||||
char enabledName[32] = "lights[x].enabled\0";
|
char enabledName[32] = "lights[x].enabled\0";
|
||||||
char typeName[32] = "lights[x].type\0";
|
char typeName[32] = "lights[x].type\0";
|
||||||
char posName[32] = "lights[x].position\0";
|
char posName[32] = "lights[x].position\0";
|
||||||
char targetName[32] = "lights[x].target\0";
|
char targetName[32] = "lights[x].target\0";
|
||||||
char colorName[32] = "lights[x].color\0";
|
char colorName[32] = "lights[x].color\0";
|
||||||
|
|
||||||
|
// Set location name [x] depending on lights count
|
||||||
enabledName[7] = '0' + lightsCount;
|
enabledName[7] = '0' + lightsCount;
|
||||||
typeName[7] = '0' + lightsCount;
|
typeName[7] = '0' + lightsCount;
|
||||||
posName[7] = '0' + lightsCount;
|
posName[7] = '0' + lightsCount;
|
||||||
|
@ -148,13 +151,15 @@ Light CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shade
|
||||||
light.colorLoc = GetShaderLocation(shader, colorName);
|
light.colorLoc = GetShaderLocation(shader, colorName);
|
||||||
|
|
||||||
UpdateLightValues(shader, light);
|
UpdateLightValues(shader, light);
|
||||||
|
|
||||||
lightsCount++;
|
lightsCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return light;
|
return light;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send to PBR shader light values
|
// Send light properties to shader
|
||||||
|
// NOTE: Light shader locations should be available
|
||||||
void UpdateLightValues(Shader shader, Light light)
|
void UpdateLightValues(Shader shader, Light light)
|
||||||
{
|
{
|
||||||
// Send to shader light enabled state and type
|
// Send to shader light enabled state and type
|
||||||
|
@ -170,8 +175,9 @@ void UpdateLightValues(Shader shader, Light light)
|
||||||
SetShaderValue(shader, light.targetLoc, target, UNIFORM_VEC3);
|
SetShaderValue(shader, light.targetLoc, target, UNIFORM_VEC3);
|
||||||
|
|
||||||
// Send to shader light color values
|
// Send to shader light color values
|
||||||
float diff[4] = { (float)light.color.r/(float)255, (float)light.color.g/(float)255, (float)light.color.b/(float)255, (float)light.color.a/(float)255 };
|
float color[4] = { (float)light.color.r/(float)255, (float)light.color.g/(float)255,
|
||||||
SetShaderValue(shader, light.colorLoc, diff, UNIFORM_VEC4);
|
(float)light.color.b/(float)255, (float)light.color.a/(float)255 };
|
||||||
|
SetShaderValue(shader, light.colorLoc, color, UNIFORM_VEC4);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // RLIGHTS_IMPLEMENTATION
|
#endif // RLIGHTS_IMPLEMENTATION
|
|
@ -11,7 +11,7 @@
|
||||||
*
|
*
|
||||||
* LICENSE: zlib/libpng
|
* LICENSE: zlib/libpng
|
||||||
*
|
*
|
||||||
* Copyright (c) 2017-2019 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
* Copyright (c) 2017-2020 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
* This software is provided "as-is", without any express or implied warranty. In no event
|
||||||
* will the authors be held liable for any damages arising from the use of this software.
|
* will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
@ -68,11 +68,6 @@ typedef enum {
|
||||||
extern "C" { // Prevents name mangling of functions
|
extern "C" { // Prevents name mangling of functions
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Global Variables Definition
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
int lightsCount = 0; // Current amount of created lights
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module Functions Declaration
|
// Module Functions Declaration
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
@ -109,7 +104,7 @@ void UpdateLightValues(Shader shader, Light light); // Send light proper
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Global Variables Definition
|
// Global Variables Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// ...
|
static int lightsCount = 0; // Current amount of created lights
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module specific Functions Declaration
|
// Module specific Functions Declaration
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue