From b1edcc822f95bdf619e1164e0d42325a71073452 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Sat, 22 Sep 2012 17:36:10 +0200 Subject: Various fixes - disabled UserDir() in path lookup - fixed crashes on loading missions in CObject - fixed texture bug in CTerrain - changed mouse move event handling to avoid flooding event queue - enabled all missions for testing --- src/graphics/engine/engine.cpp | 5 ++++- src/graphics/engine/terrain.cpp | 27 +++++++++++++++++++++------ 2 files changed, 25 insertions(+), 7 deletions(-) (limited to 'src/graphics/engine') diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp index beb7508..37f9b00 100644 --- a/src/graphics/engine/engine.cpp +++ b/src/graphics/engine/engine.cpp @@ -162,7 +162,7 @@ CEngine::CEngine(CInstanceManager *iMan, CApplication *app) m_limitLOD[1] = 200.0f; m_particleDensity = 1.0f; m_clippingDistance = 1.0f; - m_lastClippingDistance = m_clippingDistance; + m_lastClippingDistance = m_clippingDistance = 1.0f; m_objectDetail = 1.0f; m_lastObjectDetail = m_objectDetail; m_terrainVision = 1000.0f; @@ -2096,6 +2096,9 @@ void CEngine::SetViewParams(const Math::Vector& eyePt, const Math::Vector& looka Texture CEngine::CreateTexture(const std::string& texName, const TextureCreateParams& params) { + if (texName.empty()) + return Texture(); // invalid texture + if (m_texBlacklist.find(texName) != m_texBlacklist.end()) return Texture(); // invalid texture diff --git a/src/graphics/engine/terrain.cpp b/src/graphics/engine/terrain.cpp index 427e7f6..d70ba0c 100644 --- a/src/graphics/engine/terrain.cpp +++ b/src/graphics/engine/terrain.cpp @@ -131,14 +131,15 @@ bool CTerrain::InitTextures(const std::string& baseName, int* table, int dx, int m_texBaseName = baseName; size_t pos = baseName.find('.'); - if (pos == baseName.npos) + + if (pos == std::string::npos) { m_texBaseExt = ".png"; } else { - m_texBaseName = m_texBaseName.substr(0, pos); m_texBaseExt = m_texBaseName.substr(pos); + m_texBaseName = m_texBaseName.substr(0, pos); } for (int y = 0; y < m_mosaicCount*m_textureSubdivCount; y++) @@ -197,8 +198,12 @@ void CTerrain::AddMaterial(int id, const std::string& texName, const Math::Point bool CTerrain::LoadResources(const std::string& fileName) { CImage img; - if (! img.Load(CApplication::GetInstance().GetDataFilePath(DIR_TEXTURE, fileName))) + std::string path = CApplication::GetInstance().GetDataFilePath(DIR_TEXTURE, fileName); + if (! img.Load(path)) + { + GetLogger()->Error("Cannot load resource file: '%s'\n", path.c_str()); return false; + } ImageData *data = img.GetData(); @@ -210,7 +215,10 @@ bool CTerrain::LoadResources(const std::string& fileName) if ( (data->surface->w != size) || (data->surface->h != size) || (data->surface->format->BytesPerPixel != 3) ) + { + GetLogger()->Error("Invalid resource file\n"); return false; + } unsigned char* pixels = static_cast(data->surface->pixels); int pitch = data->surface->pitch; @@ -263,13 +271,17 @@ void CTerrain::FlushRelief() * The image must be 24 bits/pixel and dx x dy in size * with dx = dy = (mosaic*brick)+1 */ bool CTerrain::LoadRelief(const std::string &fileName, float scaleRelief, - bool adjustBorder) + bool adjustBorder) { m_scaleRelief = scaleRelief; CImage img; - if (! img.Load(CApplication::GetInstance().GetDataFilePath(DIR_TEXTURE, fileName))) + std::string path = CApplication::GetInstance().GetDataFilePath(DIR_TEXTURE, fileName); + if (! img.Load(path)) + { + GetLogger()->Error("Could not load relief file: '%s'!\n", path.c_str()); return false; + } ImageData *data = img.GetData(); @@ -277,7 +289,10 @@ bool CTerrain::LoadRelief(const std::string &fileName, float scaleRelief, if ( (data->surface->w != size) || (data->surface->h != size) || (data->surface->format->BytesPerPixel != 3) ) + { + GetLogger()->Error("Invalid relief file!\n"); return false; + } unsigned char* pixels = static_cast(data->surface->pixels); int pitch = data->surface->pitch; @@ -655,7 +670,7 @@ void CTerrain::GetTexture(int x, int y, std::string& name, Math::Point &uv) TerrainMaterial* tm = FindMaterial(m_materialPoints[x+y*m_materialPointCount].id); if (tm == nullptr) { - name = "xxx.png"; + name = ""; uv = Math::Point(0.0f, 0.0f); } else -- cgit v1.2.3-1-g7c22