@@ -51,18 +51,20 @@ static video::SMaterial baseMaterial() {
51
51
return mat;
52
52
};
53
53
54
- Sky::Sky (s32 id, ITextureSource *tsrc) :
54
+ Sky::Sky (s32 id, ITextureSource *tsrc, IShaderSource *ssrc ) :
55
55
scene::ISceneNode(RenderingEngine::get_scene_manager()->getRootSceneNode(),
56
56
RenderingEngine::get_scene_manager(), id)
57
57
{
58
58
setAutomaticCulling (scene::EAC_OFF);
59
59
m_box.MaxEdge .set (0 , 0 , 0 );
60
60
m_box.MinEdge .set (0 , 0 , 0 );
61
61
62
+ m_enable_shaders = g_settings->getBool (" enable_shaders" );
63
+
62
64
// Create materials
63
65
64
66
m_materials[0 ] = baseMaterial ();
65
- m_materials[0 ].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL ;
67
+ m_materials[0 ].MaterialType = ssrc-> getShaderInfo (ssrc-> getShader ( " stars_shader " , TILE_MATERIAL_ALPHA, 0 )). material ;
66
68
m_materials[0 ].Lighting = true ;
67
69
m_materials[0 ].ColorMaterial = video::ECM_NONE;
68
70
@@ -694,12 +696,11 @@ void Sky::draw_stars(video::IVideoDriver * driver, float wicked_time_of_day)
694
696
695
697
float tod = wicked_time_of_day < 0 .5f ? wicked_time_of_day : (1 .0f - wicked_time_of_day);
696
698
float starbrightness = (0 .25f - fabsf (tod)) * 20 .0f ;
697
- int alpha = clamp<int >(starbrightness * m_star_params.starcolor .getAlpha (), 0 , 255 );
698
- if (!alpha) // Stars are only drawn when not fully transparent
699
+ m_star_color = m_star_params.starcolor ;
700
+ m_star_color.a = clamp (starbrightness * m_star_color.a , 0 .0f , 1 .0f );
701
+ if (m_star_color.a <= 0 .0f ) // Stars are only drawn when not fully transparent
699
702
return ;
700
-
701
- m_materials[0 ].DiffuseColor = video::SColor (alpha, 0 , 0 , 0 );
702
- m_materials[0 ].EmissiveColor = m_star_params.starcolor ;
703
+ m_materials[0 ].DiffuseColor = m_materials[0 ].EmissiveColor = m_star_color.toSColor ();
703
704
auto sky_rotation = core::matrix4 ().setRotationAxisRadians (2 .0f * M_PI * (wicked_time_of_day - 0 .25f ), v3f (0 .0f , 0 .0f , 1 .0f ));
704
705
auto world_matrix = driver->getTransform (video::ETS_WORLD);
705
706
driver->setTransform (video::ETS_WORLD, world_matrix * sky_rotation);
0 commit comments