]> git.localhorst.tv Git - blobs.git/blobdiff - src/app/states.cpp
multiple light sources
[blobs.git] / src / app / states.cpp
index b9fc57a4c3c15ea179d4a83b34490c513c34ecc7..86b2e82c3b71e3d9d9ab630a515facde11573ab9 100644 (file)
@@ -56,10 +56,35 @@ void MasterState::OnKeyDown(const SDL_KeyboardEvent &e) {
 }
 
 void MasterState::OnRender(graphics::Viewport &viewport) {
-       glm::dmat4 ppos = cam.Model(**sim.Suns().begin());
        assets.shaders.planet_surface.Activate();
        assets.shaders.planet_surface.SetTexture(assets.textures.tiles);
-       assets.shaders.planet_surface.SetLight(glm::vec3(cam.View() * ppos[3]), glm::vec3(1.0f, 1.0f, 1.0f), 1.0e6f);
+
+       int num_lights = 0;
+       for (auto sun : sim.Suns()) {
+               // TODO: source sun's light color and strength
+               assets.shaders.planet_surface.SetLight(
+                       num_lights,
+                       glm::vec3(cam.View() * cam.Model(*sun)[3]),
+                       glm::vec3(1.0f, 1.0f, 1.0f),
+                       1.0e6f);
+               ++num_lights;
+               if (num_lights >= graphics::PlanetSurface::MAX_LIGHTS) {
+                       break;
+               }
+       }
+       for (auto planet : sim.Planets()) {
+               // TODO: indirect light from planets, calculate strength and get color somehow
+               assets.shaders.planet_surface.SetLight(
+                       num_lights,
+                       glm::vec3(cam.View() * cam.Model(*planet)[3]),
+                       glm::vec3(1.0f, 1.0f, 1.0f),
+                       10.0f);
+               ++num_lights;
+               if (num_lights >= graphics::PlanetSurface::MAX_LIGHTS) {
+                       break;
+               }
+       }
+       assets.shaders.planet_surface.SetNumLights(num_lights);
 
        for (auto planet : sim.Planets()) {
                assets.shaders.planet_surface.SetMVP(cam.Model(*planet), cam.View(), cam.Projection());