Luanti 5.11.0-dev
 
Loading...
Searching...
No Matches
light.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6#include <cassert>
7#include "config.h"
8#include "irrlichttypes.h"
9
10/*
11 Lower level lighting stuff
12*/
13
14// This directly sets the range of light.
15// Actually this is not the real maximum, and this is not the brightest, the
16// brightest is LIGHT_SUN.
17// If changed, this constant as defined in builtin/game/constants.lua must
18// also be changed.
19#define LIGHT_MAX 14
20// Light is stored as 4 bits, thus 15 is the maximum.
21// This brightness is reserved for sunlight
22#define LIGHT_SUN 15
23
24#if IS_CLIENT_BUILD
25
38extern const u8 *light_decode_table;
39
40// 0 <= light <= LIGHT_SUN
41// 0 <= return value <= 255
42inline u8 decode_light(u8 light)
43{
44 // assert(light <= LIGHT_SUN);
45 if (light > LIGHT_SUN)
46 light = LIGHT_SUN;
47 return light_decode_table[light];
48}
49
50// 0.0 <= light <= 1.0
51// 0.0 <= return value <= 1.0
52float decode_light_f(float light_f);
53
54void set_light_table(float gamma);
55
56#endif
57
58// 0 <= daylight_factor <= 1000
59// 0 <= lightday, lightnight <= LIGHT_SUN
60// 0 <= return value <= LIGHT_SUN
61inline u8 blend_light(u32 daylight_factor, u8 lightday, u8 lightnight)
62{
63 u32 c = 1000;
64 u32 l = ((daylight_factor * lightday + (c - daylight_factor) * lightnight)) / c;
65 if (l > LIGHT_SUN)
66 l = LIGHT_SUN;
67 return l;
68}
#define LIGHT_SUN
Definition light.h:22
u8 blend_light(u32 daylight_factor, u8 lightday, u8 lightnight)
Definition light.h:61