diff options
author | Piotr Dziwinski <piotrdz@gmail.com> | 2013-05-11 21:40:09 +0200 |
---|---|---|
committer | Piotr Dziwinski <piotrdz@gmail.com> | 2013-05-11 21:40:09 +0200 |
commit | f7f6e10c704585c4652fda359dc225fbb95b6075 (patch) | |
tree | 90fb42ed8c766ca37ee383d74afc7167d852ec4f /src | |
parent | cc8ed2979b14449f2dcf2b85daa7f13612d1dd00 (diff) | |
download | colobot-f7f6e10c704585c4652fda359dc225fbb95b6075.tar.gz colobot-f7f6e10c704585c4652fda359dc225fbb95b6075.tar.bz2 colobot-f7f6e10c704585c4652fda359dc225fbb95b6075.zip |
Added check and warning about non-power-of-2 textures
Diffstat (limited to 'src')
-rw-r--r-- | src/graphics/opengl/gldevice.cpp | 6 | ||||
-rw-r--r-- | src/math/func.h | 6 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/graphics/opengl/gldevice.cpp b/src/graphics/opengl/gldevice.cpp index df64e34..86f92b2 100644 --- a/src/graphics/opengl/gldevice.cpp +++ b/src/graphics/opengl/gldevice.cpp @@ -417,12 +417,16 @@ bool CGLDevice::GetLightEnabled(int index) Texture CGLDevice::CreateTexture(CImage *image, const TextureCreateParams ¶ms) { ImageData *data = image->GetData(); - if (data == NULL) + if (data == nullptr) { GetLogger()->Error("Invalid texture data\n"); return Texture(); // invalid texture } + Math::IntPoint size = image->GetSize(); + if (!Math::IsPowerOfTwo(size.x) || !Math::IsPowerOfTwo(size.y)) + GetLogger()->Warn("Creating non-power-of-2 texture (%dx%d)!\n", size.x, size.y); + return CreateTexture(data, params); } diff --git a/src/math/func.h b/src/math/func.h index 413b5d9..83e8ca4 100644 --- a/src/math/func.h +++ b/src/math/func.h @@ -128,6 +128,12 @@ inline float Rand() return static_cast<float>(rand()) / static_cast<float>(RAND_MAX); } +//! Returns whether \a x is an even power of 2 +inline bool IsPowerOfTwo(unsigned int x) +{ + return x && !(x & (x - 1)); +} + //! Returns the next nearest power of two to \a x inline int NextPowerOfTwo(int x) { |