diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llrender/llimagegl.cpp | 19 | ||||
| -rw-r--r-- | indra/llrender/llimagegl.h | 2 | 
2 files changed, 16 insertions, 5 deletions
| diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index ebed454271..81a5537f78 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -487,14 +487,15 @@ bool LLImageGL::checkSize(S32 width, S32 height)  	return check_power_of_two(width) && check_power_of_two(height);  } -void LLImageGL::setSize(S32 width, S32 height, S32 ncomponents, S32 discard_level) +bool LLImageGL::setSize(S32 width, S32 height, S32 ncomponents, S32 discard_level)  {  	if (width != mWidth || height != mHeight || ncomponents != mComponents)  	{  		// Check if dimensions are a power of two!  		if (!checkSize(width,height))  		{ -			LL_ERRS() << llformat("Texture has non power of two dimension: %dx%d",width,height) << LL_ENDL; +			LL_WARNS() << llformat("Texture has non power of two dimension: %dx%d",width,height) << LL_ENDL; +			return false;  		}  		if (mTexName) @@ -529,6 +530,8 @@ void LLImageGL::setSize(S32 width, S32 height, S32 ncomponents, S32 discard_leve  			mMaxDiscardLevel = MAX_DISCARD_LEVEL;  		}  	} + +	return true;  }  //---------------------------------------------------------------------------- @@ -909,7 +912,11 @@ BOOL LLImageGL::preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image)  	S32 h = raw_image->getHeight() << discard_level;  	// setSize may call destroyGLTexture if the size does not match -	setSize(w, h, raw_image->getComponents(), discard_level); +	if (!setSize(w, h, raw_image->getComponents(), discard_level)) +	{ +		LL_WARNS() << "Trying to create a texture with incorrect dimensions!" << LL_ENDL; +		return FALSE; +	}  	if( !mHasExplicitFormat )  	{ @@ -1273,7 +1280,11 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S  	S32 h = raw_h << discard_level;  	// setSize may call destroyGLTexture if the size does not match -	setSize(w, h, imageraw->getComponents(), discard_level); +	if (!setSize(w, h, imageraw->getComponents(), discard_level)) +	{ +		LL_WARNS() << "Trying to create a texture with incorrect dimensions!" << LL_ENDL; +		return FALSE; +	}  	if( !mHasExplicitFormat )  	{ diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h index 21982eab1d..ad2aea9067 100644 --- a/indra/llrender/llimagegl.h +++ b/indra/llrender/llimagegl.h @@ -94,7 +94,7 @@ protected:  public:  	virtual void dump();	// debugging info to LL_INFOS() -	void setSize(S32 width, S32 height, S32 ncomponents, S32 discard_level = -1); +	bool setSize(S32 width, S32 height, S32 ncomponents, S32 discard_level = -1);  	void setComponents(S32 ncomponents) { mComponents = (S8)ncomponents ;}  	void setAllowCompression(bool allow) { mAllowCompression = allow; } | 
