|
|
@ -1,168 +0,0 @@ |
|
|
|
/********************************************************************************************** |
|
|
|
* |
|
|
|
* raylib.lights - Some useful functions to deal with lights data |
|
|
|
* |
|
|
|
* CONFIGURATION: |
|
|
|
* |
|
|
|
* #define RLIGHTS_IMPLEMENTATION |
|
|
|
* Generates the implementation of the library into the included file. |
|
|
|
* If not defined, the library is in header only mode and can be included in other headers |
|
|
|
* or source files without problems. But only ONE file should hold the implementation. |
|
|
|
* |
|
|
|
* LICENSE: zlib/libpng |
|
|
|
* |
|
|
|
* Copyright (c) 2017-2022 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5) |
|
|
|
* |
|
|
|
* 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. |
|
|
|
* |
|
|
|
* Permission is granted to anyone to use this software for any purpose, including commercial |
|
|
|
* applications, and to alter it and redistribute it freely, subject to the following restrictions: |
|
|
|
* |
|
|
|
* 1. The origin of this software must not be misrepresented; you must not claim that you |
|
|
|
* wrote the original software. If you use this software in a product, an acknowledgment |
|
|
|
* in the product documentation would be appreciated but is not required. |
|
|
|
* |
|
|
|
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented |
|
|
|
* as being the original software. |
|
|
|
* |
|
|
|
* 3. This notice may not be removed or altered from any source distribution. |
|
|
|
* |
|
|
|
**********************************************************************************************/ |
|
|
|
|
|
|
|
#ifndef RLIGHTS_H |
|
|
|
#define RLIGHTS_H |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Defines and Macros |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
#define MAX_LIGHTS 4 // Max dynamic lights supported by shader |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Types and Structures Definition |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Light data |
|
|
|
typedef struct { |
|
|
|
int type; |
|
|
|
bool enabled; |
|
|
|
Vector3 position; |
|
|
|
Vector3 target; |
|
|
|
Color color; |
|
|
|
|
|
|
|
// Shader locations |
|
|
|
int enabledLoc; |
|
|
|
int typeLoc; |
|
|
|
int positionLoc; |
|
|
|
int targetLoc; |
|
|
|
int colorLoc; |
|
|
|
} Light; |
|
|
|
|
|
|
|
// Light type |
|
|
|
typedef enum { |
|
|
|
LIGHT_DIRECTIONAL = 0, |
|
|
|
LIGHT_POINT |
|
|
|
} LightType; |
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
extern "C" { // Prevents name mangling of functions |
|
|
|
#endif |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Declaration |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
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 light properties to shader |
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#endif // RLIGHTS_H |
|
|
|
|
|
|
|
|
|
|
|
/*********************************************************************************** |
|
|
|
* |
|
|
|
* RLIGHTS IMPLEMENTATION |
|
|
|
* |
|
|
|
************************************************************************************/ |
|
|
|
|
|
|
|
#if defined(RLIGHTS_IMPLEMENTATION) |
|
|
|
|
|
|
|
#include "raylib.h" |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Defines and Macros |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// ... |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Types and Structures Definition |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// ... |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Global Variables Definition |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
static int lightsCount = 0; // Current amount of created lights |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module specific Functions Declaration |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// ... |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Create a light and get shader locations |
|
|
|
Light CreateLight(int type, Vector3 position, Vector3 target, Color color, Shader shader) |
|
|
|
{ |
|
|
|
Light light = { 0 }; |
|
|
|
|
|
|
|
if (lightsCount < MAX_LIGHTS) |
|
|
|
{ |
|
|
|
light.enabled = true; |
|
|
|
light.type = type; |
|
|
|
light.position = position; |
|
|
|
light.target = target; |
|
|
|
light.color = color; |
|
|
|
|
|
|
|
// NOTE: Lighting shader naming must be the provided ones |
|
|
|
light.enabledLoc = GetShaderLocation(shader, TextFormat("lights[%i].enabled", lightsCount)); |
|
|
|
light.typeLoc = GetShaderLocation(shader, TextFormat("lights[%i].type", lightsCount)); |
|
|
|
light.positionLoc = GetShaderLocation(shader, TextFormat("lights[%i].position", lightsCount)); |
|
|
|
light.targetLoc = GetShaderLocation(shader, TextFormat("lights[%i].target", lightsCount)); |
|
|
|
light.colorLoc = GetShaderLocation(shader, TextFormat("lights[%i].color", lightsCount)); |
|
|
|
|
|
|
|
UpdateLightValues(shader, light); |
|
|
|
|
|
|
|
lightsCount++; |
|
|
|
} |
|
|
|
|
|
|
|
return light; |
|
|
|
} |
|
|
|
|
|
|
|
// Send light properties to shader |
|
|
|
// NOTE: Light shader locations should be available |
|
|
|
void UpdateLightValues(Shader shader, Light light) |
|
|
|
{ |
|
|
|
// Send to shader light enabled state and type |
|
|
|
SetShaderValue(shader, light.enabledLoc, &light.enabled, SHADER_UNIFORM_INT); |
|
|
|
SetShaderValue(shader, light.typeLoc, &light.type, SHADER_UNIFORM_INT); |
|
|
|
|
|
|
|
// Send to shader light position values |
|
|
|
float position[3] = { light.position.x, light.position.y, light.position.z }; |
|
|
|
SetShaderValue(shader, light.positionLoc, position, SHADER_UNIFORM_VEC3); |
|
|
|
|
|
|
|
// Send to shader light target position values |
|
|
|
float target[3] = { light.target.x, light.target.y, light.target.z }; |
|
|
|
SetShaderValue(shader, light.targetLoc, target, SHADER_UNIFORM_VEC3); |
|
|
|
|
|
|
|
// Send to shader light color values |
|
|
|
float color[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 }; |
|
|
|
SetShaderValue(shader, light.colorLoc, color, SHADER_UNIFORM_VEC4); |
|
|
|
} |
|
|
|
|
|
|
|
#endif // RLIGHTS_IMPLEMENTATION |