summaryrefslogtreecommitdiffstats
path: root/src/graphics/engine
diff options
context:
space:
mode:
authorPiotr Dziwinski <piotrdz@gmail.com>2012-09-22 17:36:10 +0200
committerPiotr Dziwinski <piotrdz@gmail.com>2012-09-22 17:36:10 +0200
commitb1edcc822f95bdf619e1164e0d42325a71073452 (patch)
treebe8c39560b809ab0f75143df3960323b135cca6b /src/graphics/engine
parentfd09071c29452bdfea2c519f0defbffebee42f4c (diff)
downloadcolobot-b1edcc822f95bdf619e1164e0d42325a71073452.tar.gz
colobot-b1edcc822f95bdf619e1164e0d42325a71073452.tar.bz2
colobot-b1edcc822f95bdf619e1164e0d42325a71073452.zip
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
Diffstat (limited to 'src/graphics/engine')
-rw-r--r--src/graphics/engine/engine.cpp5
-rw-r--r--src/graphics/engine/terrain.cpp27
2 files changed, 25 insertions, 7 deletions
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<unsigned char*>(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<unsigned char*>(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