|
@@ -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
|