Skip to content
Snippets Groups Projects
Commit 535c4731 authored by RealBadAngel's avatar RealBadAngel
Browse files

Restore finalColorBlend implementation in shaders.

parent 500f6914
No related branches found
No related tags found
No related merge requests found
...@@ -49,8 +49,8 @@ void main(void) ...@@ -49,8 +49,8 @@ void main(void)
vec4 pos = gl_Vertex; vec4 pos = gl_Vertex;
vec4 pos2 = mWorld * gl_Vertex; vec4 pos2 = mWorld * gl_Vertex;
if (gl_TexCoord[0].y < 0.05) { if (gl_TexCoord[0].y < 0.05) {
pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2.x * 0.1 + pos2.z * 0.1) * 2.0 - 1.0) * 0.8; pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2.x * 0.1 + pos2.z * 0.1) * 2.0 - 1.0) * 0.8;
pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2.x * -0.5 + pos2.z * -0.5) * 2.0 - 1.0) * 0.4; pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2.x * -0.5 + pos2.z * -0.5) * 2.0 - 1.0) * 0.4;
} }
gl_Position = mWorldViewProj * pos; gl_Position = mWorldViewProj * pos;
#else #else
...@@ -97,5 +97,31 @@ void main(void) ...@@ -97,5 +97,31 @@ void main(void)
eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
tsEyeVec = eyeVec * tbnMatrix; tsEyeVec = eyeVec * tbnMatrix;
gl_FrontColor = gl_BackColor = gl_Color; vec4 color;
float day = gl_Color.r;
float night = gl_Color.g;
float light_source = gl_Color.b;
float rg = mix(night, day, dayNightRatio);
rg += light_source * 2.5; // Make light sources brighter
float b = rg;
// Moonlight is blue
b += (day - night) / 13.0;
rg -= (day - night) / 23.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
// Artificial light is yellow-ish
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = clamp(color,0.0,1.0);
} }
...@@ -49,8 +49,8 @@ void main(void) ...@@ -49,8 +49,8 @@ void main(void)
vec4 pos = gl_Vertex; vec4 pos = gl_Vertex;
vec4 pos2 = mWorld * gl_Vertex; vec4 pos2 = mWorld * gl_Vertex;
if (gl_TexCoord[0].y < 0.05) { if (gl_TexCoord[0].y < 0.05) {
pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2.x * 0.1 + pos2.z * 0.1) * 2.0 - 1.0) * 0.8; pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2.x * 0.1 + pos2.z * 0.1) * 2.0 - 1.0) * 0.8;
pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2.x * -0.5 + pos2.z * -0.5) * 2.0 - 1.0) * 0.4; pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2.x * -0.5 + pos2.z * -0.5) * 2.0 - 1.0) * 0.4;
} }
gl_Position = mWorldViewProj * pos; gl_Position = mWorldViewProj * pos;
#else #else
...@@ -97,5 +97,31 @@ void main(void) ...@@ -97,5 +97,31 @@ void main(void)
eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
tsEyeVec = eyeVec * tbnMatrix; tsEyeVec = eyeVec * tbnMatrix;
gl_FrontColor = gl_BackColor = gl_Color; vec4 color;
float day = gl_Color.r;
float night = gl_Color.g;
float light_source = gl_Color.b;
float rg = mix(night, day, dayNightRatio);
rg += light_source * 2.5; // Make light sources brighter
float b = rg;
// Moonlight is blue
b += (day - night) / 13.0;
rg -= (day - night) / 23.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
// Artificial light is yellow-ish
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = clamp(color,0.0,1.0);
} }
...@@ -1162,12 +1162,16 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): ...@@ -1162,12 +1162,16 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
applyFacesShading (vc, 0.836660); applyFacesShading (vc, 0.836660);
} }
} }
// - Classic lighting if(!m_enable_shaders)
// Set initial real color and store for later updates {
u8 day = vc.getRed(); // - Classic lighting (shaders handle this by themselves)
u8 night = vc.getGreen(); // Set initial real color and store for later updates
finalColorBlend(vc, day, night, 1000); u8 day = vc.getRed();
m_daynight_diffs[i][j] = std::make_pair(day, night); u8 night = vc.getGreen();
finalColorBlend(vc, day, night, 1000);
if(day != night)
m_daynight_diffs[i][j] = std::make_pair(day, night);
}
} }
// Create material // Create material
...@@ -1331,7 +1335,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat ...@@ -1331,7 +1335,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
} }
// Day-night transition // Day-night transition
if(daynight_ratio != m_last_daynight_ratio) if(!m_enable_shaders && (daynight_ratio != m_last_daynight_ratio))
{ {
for(std::map<u32, std::map<u32, std::pair<u8, u8> > >::iterator for(std::map<u32, std::map<u32, std::pair<u8, u8> > >::iterator
i = m_daynight_diffs.begin(); i = m_daynight_diffs.begin();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment