diff options
author | Piotr Dziwinski <piotrdz@gmail.com> | 2012-08-27 01:02:25 +0200 |
---|---|---|
committer | Piotr Dziwinski <piotrdz@gmail.com> | 2012-08-27 01:02:25 +0200 |
commit | 3e52ae4ca9e27607b5691da0edbf3454e5e6099b (patch) | |
tree | 8d85dd2eb35a9b6b663db63f89193548510283d5 /src/graphics/engine/terrain.cpp | |
parent | 8b2bca72dd71a1c23db51269a147443c80758f10 (diff) | |
download | colobot-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.cpp | 12 |
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))); |