summaryrefslogtreecommitdiffstats
path: root/src/graphics/engine/terrain.cpp
diff options
context:
space:
mode:
authorPiotr Dziwinski <piotrdz@gmail.com>2012-08-27 01:02:25 +0200
committerPiotr Dziwinski <piotrdz@gmail.com>2012-08-27 01:02:25 +0200
commit3e52ae4ca9e27607b5691da0edbf3454e5e6099b (patch)
tree8d85dd2eb35a9b6b663db63f89193548510283d5 /src/graphics/engine/terrain.cpp
parent8b2bca72dd71a1c23db51269a147443c80758f10 (diff)
downloadcolobot-3e52ae4ca9e27607b5691da0edbf3454e5e6099b.tar.gz
colobot-3e52ae4ca9e27607b5691da0edbf3454e5e6099b.tar.bz2
colobot-3e52ae4ca9e27607b5691da0edbf3454e5e6099b.zip
Fixes in terrain rendering
Diffstat (limited to 'src/graphics/engine/terrain.cpp')
-rw-r--r--src/graphics/engine/terrain.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/graphics/engine/terrain.cpp b/src/graphics/engine/terrain.cpp
index 6b26281..368796a 100644
--- a/src/graphics/engine/terrain.cpp
+++ b/src/graphics/engine/terrain.cpp
@@ -241,8 +241,13 @@ bool Gfx::CTerrain::ResFromPNG(const std::string& fileName)
(data->surface->format->BytesPerPixel != 3) )
return false;
- // Assuming the data format is compatible
- memcpy(&m_resources[0], data->surface->pixels, 3*size*size);
+ unsigned char* pixels = static_cast<unsigned char*>(data->surface->pixels);
+ int pitch = data->surface->pitch;
+
+ for (int y = 0; y < size; y++)
+ {
+ memcpy(&m_resources[3*size*y], &pixels[pitch*y], 3*size);
+ }
return true;
}
@@ -314,13 +319,14 @@ bool Gfx::CTerrain::ReliefFromPNG(const std::string &fileName, float scaleRelief
return false;
unsigned char* pixels = static_cast<unsigned char*>(data->surface->pixels);
+ int pitch = data->surface->pitch;
float limit = 0.9f;
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
- float level = (255 - pixels[3*x+3*size*(size-y-1)]) * scaleRelief;
+ float level = (255 - pixels[3*x+pitch*(size-y-1)]) * scaleRelief;
float dist = Math::Max(fabs(static_cast<float>(x-size/2)),
fabs(static_cast<float>(y-size/2)));