[colobot] 10/100: Fix GroundSpot blending, closes #846

Didier Raboud odyx at moszumanska.debian.org
Thu Jun 1 18:10:14 UTC 2017


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch debian/master
in repository colobot.

commit 6e4764b97cc43c6f02f968c036940658d7d519ad
Author: krzys-h <krzys_h at interia.pl>
Date:   Fri Nov 11 17:06:53 2016 +0100

    Fix GroundSpot blending, closes #846
---
 src/graphics/engine/engine.cpp | 45 ++++++++++++++++++++++--------------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp
index 21a5beb..b2aa631 100644
--- a/src/graphics/engine/engine.cpp
+++ b/src/graphics/engine/engine.cpp
@@ -4262,15 +4262,15 @@ void CEngine::UpdateGroundSpotTextures()
                             else
                                 intensity = Math::Point(ppx-cx, ppy-cy).Length()/dot;
 
-                            Gfx::Color color;
-                            color.r = Math::Norm(m_groundSpots[i].color.r+intensity);
-                            color.g = Math::Norm(m_groundSpots[i].color.g+intensity);
-                            color.b = Math::Norm(m_groundSpots[i].color.b+intensity);
-
                             ppx -= min.x;  // on the texture
                             ppy -= min.y;
+                            Math::IntPoint pp(ppx, ppy);
 
-                            shadowImg.SetPixel(Math::IntPoint(ppx, ppy), color);
+                            Gfx::Color color = shadowImg.GetPixel(pp);
+                            color.r *= Math::Norm(m_groundSpots[i].color.r+intensity);
+                            color.g *= Math::Norm(m_groundSpots[i].color.g+intensity);
+                            color.b *= Math::Norm(m_groundSpots[i].color.b+intensity);
+                            shadowImg.SetPixel(pp, color);
                         }
                     }
                 }
@@ -4298,12 +4298,13 @@ void CEngine::UpdateGroundSpotTextures()
 
                             if (intensity < 0.0f) intensity = 0.0f;
 
-                            Gfx::Color color;
-                            color.r = Math::Norm(m_groundSpots[i].color.r+intensity);
-                            color.g = Math::Norm(m_groundSpots[i].color.g+intensity);
-                            color.b = Math::Norm(m_groundSpots[i].color.b+intensity);
+                            Math::IntPoint pp(ix, iy);
 
-                            shadowImg.SetPixel(Math::IntPoint(ix, iy), color);
+                            Gfx::Color color = shadowImg.GetPixel(pp);
+                            color.r *= Math::Norm(m_groundSpots[i].color.r+intensity);
+                            color.g *= Math::Norm(m_groundSpots[i].color.g+intensity);
+                            color.b *= Math::Norm(m_groundSpots[i].color.b+intensity);
+                            shadowImg.SetPixel(pp, color);
                         }
                     }
                 }
@@ -4351,19 +4352,21 @@ void CEngine::UpdateGroundSpotTextures()
                         int j = (ix+dot) + (iy+dot) * m_groundMark.dx;
                         if (m_groundMark.table[j] == 1)  // green ?
                         {
-                            Gfx::Color color;
-                            color.r = Math::Norm(1.0f-intensity);
-                            color.g = 1.0f;
-                            color.b = Math::Norm(1.0f-intensity);
-                            shadowImg.SetPixel(Math::IntPoint(ppx, ppy), color);
+                            Math::IntPoint pp(ppx, ppy);
+                            Gfx::Color color = shadowImg.GetPixel(pp);
+                            color.r *= Math::Norm(1.0f-intensity);
+                            color.g *= 1.0f;
+                            color.b *= Math::Norm(1.0f-intensity);
+                            shadowImg.SetPixel(pp, color);
                         }
                         if (m_groundMark.table[j] == 2)  // red ?
                         {
-                            Gfx::Color color;
-                            color.r = 1.0f;
-                            color.g = Math::Norm(1.0f-intensity);
-                            color.b = Math::Norm(1.0f-intensity);
-                            shadowImg.SetPixel(Math::IntPoint(ppx, ppy), color);
+                            Math::IntPoint pp(ppx, ppy);
+                            Gfx::Color color = shadowImg.GetPixel(pp);
+                            color.r *= 1.0f;
+                            color.g *= Math::Norm(1.0f-intensity);
+                            color.b *= Math::Norm(1.0f-intensity);
+                            shadowImg.SetPixel(pp, color);
                         }
                     }
                 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list