mirror of
https://github.com/minetest/minetest.git
synced 2024-07-02 14:10:33 +02:00
Fixed the ambient light for particles, some code improvements
This commit is contained in:
parent
56392c2d08
commit
385bb3c801
@ -264,10 +264,9 @@ void ClientEnvironment::step(float dtime)
|
||||
u16 light = getInteriorLight(node_at_lplayer, 0, m_client->ndef());
|
||||
lplayer->light_color = encode_light(light, 0); // this transfers light.alpha
|
||||
|
||||
video::SColor ambient_light(255, 0, 0, 0);
|
||||
video::SColor ambient_light = g_settings->getBool("enable_shaders") ?
|
||||
lplayer->getLighting().ambient_light : video::SColor(255, 0, 0, 0);
|
||||
|
||||
if (g_settings->getBool("enable_shaders"))
|
||||
ambient_light = lplayer->getLighting().ambient_light;
|
||||
final_color_blend(&lplayer->light_color, light, day_night_ratio, ambient_light);
|
||||
}
|
||||
|
||||
|
@ -475,7 +475,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
|
||||
get_sunlight_color(&sunlight, daynight_ratio);
|
||||
m_day_light.set(sunlight, services);
|
||||
|
||||
auto lighting = m_client->getEnv().getLocalPlayer()->getLighting();
|
||||
Lighting &lighting = m_client->getEnv().getLocalPlayer()->getLighting();
|
||||
|
||||
video::SColorf ambient_light_f(lighting.ambient_light);
|
||||
m_ambient_light.set(ambient_light_f, services);
|
||||
|
@ -47,7 +47,8 @@ video::SColor encode_light(u16 light, u8 emissive_light)
|
||||
return video::SColor(r, b, b, b);
|
||||
}
|
||||
|
||||
void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio){
|
||||
void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio)
|
||||
{
|
||||
f32 rg = daynight_ratio / 1000.0f - 0.04f;
|
||||
f32 b = (0.98f * daynight_ratio) / 1000.0f + 0.078f;
|
||||
sunlight->r = rg;
|
||||
@ -56,7 +57,7 @@ void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio){
|
||||
}
|
||||
|
||||
void final_color_blend(video::SColor *result,
|
||||
u16 light, u32 daynight_ratio, video::SColor ambientLight)
|
||||
u16 light, u32 daynight_ratio, const video::SColorf &ambientLight)
|
||||
{
|
||||
video::SColorf dayLight;
|
||||
get_sunlight_color(&dayLight, daynight_ratio);
|
||||
@ -66,7 +67,7 @@ void final_color_blend(video::SColor *result,
|
||||
|
||||
void final_color_blend(video::SColor *result,
|
||||
const video::SColor &data, const video::SColorf &dayLight,
|
||||
video::SColor ambientLight)
|
||||
const video::SColorf &ambientLight)
|
||||
{
|
||||
static const video::SColorf artificialColor(1.04f, 1.04f, 1.04f);
|
||||
|
||||
@ -88,9 +89,9 @@ void final_color_blend(video::SColor *result,
|
||||
0, 255) / 8] / 255.0f;
|
||||
|
||||
// Add ambient light
|
||||
r += ambientLight.getRed() / 255.f;
|
||||
g += ambientLight.getGreen() / 255.f;
|
||||
b += ambientLight.getBlue() / 255.f;
|
||||
r += ambientLight.r;
|
||||
g += ambientLight.g;
|
||||
b += ambientLight.b;
|
||||
|
||||
result->setRed(core::clamp((s32)(r * 255.f), 0, 255));
|
||||
result->setGreen(core::clamp((s32)(g * 255.f), 0, 255));
|
||||
|
@ -47,7 +47,7 @@ void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio);
|
||||
* night light
|
||||
*/
|
||||
void final_color_blend(video::SColor *result,
|
||||
u16 light, u32 daynight_ratio, video::SColor ambientLight=video::SColor(255,0,0,0));
|
||||
u16 light, u32 daynight_ratio, const video::SColorf &ambientLight=video::SColorf(0.0f, 0.0f, 0.0f, 1.0f));
|
||||
|
||||
/*!
|
||||
* Gives the final SColor shown on screen.
|
||||
@ -58,4 +58,4 @@ void final_color_blend(video::SColor *result,
|
||||
*/
|
||||
void final_color_blend(video::SColor *result,
|
||||
const video::SColor &data, const video::SColorf &dayLight,
|
||||
video::SColor ambientLight=video::SColor(255,0,0,0));
|
||||
const video::SColorf &ambientLight=video::SColorf(0.0f, 0.0f, 0.0f, 1.0f));
|
||||
|
@ -189,10 +189,12 @@ video::SColor Particle::updateLight(ClientEnvironment *env)
|
||||
|
||||
light = decode_light(light + m_p.glow);
|
||||
|
||||
video::SColor light_color{0xFFFFFFFF};
|
||||
video::SColor light_color(0xFFFFFFFF);
|
||||
video::SColor ambient_light = g_settings->getBool("enable_shaders") ?
|
||||
env->getLocalPlayer()->getLighting().ambient_light : video::SColor(255, 0, 0, 0);
|
||||
|
||||
final_color_blend(&light_color, static_cast<u16>(light) * 255, env->getDayNightRatio(),
|
||||
env->getLocalPlayer()->getLighting().ambient_light);
|
||||
ambient_light);
|
||||
return video::SColor(255,
|
||||
light_color.getRed() * m_base_color.getRed() / 255,
|
||||
light_color.getGreen() * m_base_color.getGreen() / 255,
|
||||
|
Loading…
Reference in New Issue
Block a user