fix non-power-of-2 texture in map preview
This commit is contained in:
@@ -437,10 +437,16 @@ namespace OpenRA.GlRenderer
|
|||||||
|
|
||||||
public void SetData(Bitmap bitmap)
|
public void SetData(Bitmap bitmap)
|
||||||
{
|
{
|
||||||
|
if( !IsPowerOf2( bitmap.Width ) || !IsPowerOf2( bitmap.Height ) )
|
||||||
|
{
|
||||||
|
//throw new InvalidOperationException( "non-power-of-2-texture" );
|
||||||
|
bitmap = new Bitmap( bitmap, new Size( NextPowerOf2( bitmap.Width ), NextPowerOf2( bitmap.Height ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
Gl.glBindTexture( Gl.GL_TEXTURE_2D, texture );
|
Gl.glBindTexture( Gl.GL_TEXTURE_2D, texture );
|
||||||
GraphicsDevice.CheckGlError();
|
GraphicsDevice.CheckGlError();
|
||||||
|
|
||||||
var bits = bitmap.LockBits(
|
var bits = bitmap.LockBits(
|
||||||
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
|
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
|
||||||
ImageLockMode.ReadOnly,
|
ImageLockMode.ReadOnly,
|
||||||
PixelFormat.Format32bppArgb);
|
PixelFormat.Format32bppArgb);
|
||||||
@@ -455,5 +461,21 @@ namespace OpenRA.GlRenderer
|
|||||||
|
|
||||||
bitmap.UnlockBits(bits);
|
bitmap.UnlockBits(bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsPowerOf2( int v )
|
||||||
|
{
|
||||||
|
return ( v & ( v - 1 ) ) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int NextPowerOf2( int v )
|
||||||
|
{
|
||||||
|
--v;
|
||||||
|
v |= v >> 1;
|
||||||
|
v |= v >> 2;
|
||||||
|
v |= v >> 4;
|
||||||
|
v |= v >> 8;
|
||||||
|
++v;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user