Use maximum possible resolution for bmp->texture
This commit is contained in:
1 parent
5aeea59e76
commit
55ef3a0050
2 files changed
+35
-68
No files matched your search
@@ -857,49 +857,31 @@ namespace Vocaluxe.Lib.Draw
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int w = bmp.Width;
|
STexture texture = new STexture(-1, bmp.Width, bmp.Height) {UseFullTexture = true};
|
||||||
int h = bmp.Height;
|
|
||||||
float ratio = (float)w / h;
|
|
||||||
int newW = w;
|
|
||||||
int newH = h;
|
|
||||||
|
|
||||||
if (w > maxSize && w > h)
|
int w = Math.Min(bmp.Width, maxSize);
|
||||||
newW = maxSize;
|
int h = Math.Min(bmp.Height, maxSize);
|
||||||
else if (h > maxSize)
|
w = _CheckForNextPowerOf2(w);
|
||||||
newH = maxSize;
|
h = _CheckForNextPowerOf2(h);
|
||||||
else if (w > h)
|
|
||||||
newW = _CheckForNextPowerOf2(w);
|
texture.W2 = w;
|
||||||
else
|
texture.H2 = h;
|
||||||
newH = _CheckForNextPowerOf2(h);
|
|
||||||
|
|
||||||
Bitmap bmp2 = null;
|
Bitmap bmp2 = null;
|
||||||
byte[] data;
|
byte[] data;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (w != newW || h != newH)
|
if (bmp.Width != w || bmp.Height != h)
|
||||||
{
|
{
|
||||||
if (w != newW)
|
|
||||||
{
|
|
||||||
w = newW;
|
|
||||||
h = (int)Math.Round(w / ratio);
|
|
||||||
if (h == 0)
|
|
||||||
h = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
h = newH;
|
|
||||||
w = (int)Math.Round(h * ratio);
|
|
||||||
if (w == 0)
|
|
||||||
w = 1;
|
|
||||||
}
|
|
||||||
//Create a new Bitmap with the new sizes
|
//Create a new Bitmap with the new sizes
|
||||||
bmp2 = new Bitmap(w, h);
|
bmp2 = new Bitmap(w, h);
|
||||||
//Scale the texture
|
//Scale the texture
|
||||||
Graphics g = Graphics.FromImage(bmp2);
|
using (Graphics g = Graphics.FromImage(bmp2))
|
||||||
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
{
|
||||||
g.SmoothingMode = SmoothingMode.HighQuality;
|
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||||
g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height));
|
g.SmoothingMode = SmoothingMode.HighQuality;
|
||||||
g.Dispose();
|
g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height));
|
||||||
|
}
|
||||||
bmp = bmp2;
|
bmp = bmp2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -915,14 +897,18 @@ namespace Vocaluxe.Lib.Draw
|
|||||||
bmp2.Dispose();
|
bmp2.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
return AddTexture(w, h, data);
|
return _AddTexture(texture, w, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public STexture AddTexture(int w, int h, byte[] data)
|
public STexture AddTexture(int w, int h, byte[] data)
|
||||||
{
|
{
|
||||||
STexture texture = new STexture(-1, w, h);
|
STexture texture = new STexture(-1, w, h) {W2 = _CheckForNextPowerOf2(w), H2 = _CheckForNextPowerOf2(h)};
|
||||||
|
return _AddTexture(texture, w, data);
|
||||||
|
}
|
||||||
|
|
||||||
Texture t = _CreateTexture(data, ref texture);
|
private STexture _AddTexture(STexture texture, int w, byte[] data)
|
||||||
|
{
|
||||||
|
Texture t = _CreateTexture(ref texture, w, data);
|
||||||
|
|
||||||
lock (_MutexTexture)
|
lock (_MutexTexture)
|
||||||
{
|
{
|
||||||
@@ -933,13 +919,8 @@ namespace Vocaluxe.Lib.Draw
|
|||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Texture _CreateTexture(byte[] data, ref STexture texture)
|
private Texture _CreateTexture(ref STexture texture, int w, byte[] data)
|
||||||
{
|
{
|
||||||
int w = texture.OrigSize.Width;
|
|
||||||
int h = texture.OrigSize.Height;
|
|
||||||
texture.W2 = _CheckForNextPowerOf2(w);
|
|
||||||
texture.H2 = _CheckForNextPowerOf2(h);
|
|
||||||
|
|
||||||
//Create a new texture in the managed pool, which does not need to be recreated on a lost device
|
//Create a new texture in the managed pool, which does not need to be recreated on a lost device
|
||||||
//because a copy of the texture is hold in the Ram
|
//because a copy of the texture is hold in the Ram
|
||||||
Texture t = null;
|
Texture t = null;
|
||||||
@@ -1322,7 +1303,9 @@ namespace Vocaluxe.Lib.Draw
|
|||||||
STexture texture = _Textures[q.ID];
|
STexture texture = _Textures[q.ID];
|
||||||
if (q.Width == texture.OrigSize.Width && q.Height == texture.OrigSize.Height)
|
if (q.Width == texture.OrigSize.Width && q.Height == texture.OrigSize.Height)
|
||||||
{
|
{
|
||||||
Texture t = _CreateTexture(q.Data, ref texture);
|
texture.W2 = _CheckForNextPowerOf2(texture.OrigSize.Width);
|
||||||
|
texture.H2 = _CheckForNextPowerOf2(texture.OrigSize.Height);
|
||||||
|
Texture t = _CreateTexture(ref texture, q.Width, q.Data);
|
||||||
_D3DTextures[q.ID] = t;
|
_D3DTextures[q.ID] = t;
|
||||||
|
|
||||||
_Textures[texture.Index] = texture;
|
_Textures[texture.Index] = texture;
|
||||||
|
|||||||
@@ -698,42 +698,26 @@ namespace Vocaluxe.Lib.Draw
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int w = bmp.Width;
|
STexture texture = new STexture(-1, bmp.Width, bmp.Height) {UseFullTexture = true};
|
||||||
int h = bmp.Height;
|
|
||||||
|
|
||||||
if (w > maxSize)
|
|
||||||
{
|
|
||||||
h = (int)Math.Round((float)maxSize / bmp.Width * bmp.Height);
|
|
||||||
if (h == 0)
|
|
||||||
h = 1;
|
|
||||||
w = maxSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (h > maxSize)
|
|
||||||
{
|
|
||||||
w = (int)Math.Round((float)maxSize / bmp.Height * bmp.Width);
|
|
||||||
if (w == 0)
|
|
||||||
w = 1;
|
|
||||||
h = maxSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
STexture texture = new STexture(-1, bmp.Width, bmp.Height){UseFullTexture = true};
|
|
||||||
|
|
||||||
int id = GL.GenTexture();
|
int id = GL.GenTexture();
|
||||||
GL.BindTexture(TextureTarget.Texture2D, id);
|
GL.BindTexture(TextureTarget.Texture2D, id);
|
||||||
texture.ID = id;
|
texture.ID = id;
|
||||||
|
|
||||||
|
int w = Math.Min(bmp.Width, maxSize);
|
||||||
|
int h = Math.Min(bmp.Height, maxSize);
|
||||||
texture.W2 = MathHelper.NextPowerOfTwo(w);
|
texture.W2 = MathHelper.NextPowerOfTwo(w);
|
||||||
texture.H2 = MathHelper.NextPowerOfTwo(h);
|
texture.H2 = MathHelper.NextPowerOfTwo(h);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (Bitmap bmp2 = new Bitmap(texture.W2, texture.H2))
|
using (Bitmap bmp2 = new Bitmap(texture.W2, texture.H2))
|
||||||
{
|
{
|
||||||
Graphics g = Graphics.FromImage(bmp2);
|
using (Graphics g = Graphics.FromImage(bmp2))
|
||||||
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
{
|
||||||
g.SmoothingMode = SmoothingMode.HighQuality;
|
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||||
g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height));
|
g.SmoothingMode = SmoothingMode.HighQuality;
|
||||||
g.Dispose();
|
g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height));
|
||||||
|
}
|
||||||
|
|
||||||
BitmapData bmpData = bmp2.LockBits(new Rectangle(0, 0, bmp2.Width, bmp2.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
BitmapData bmpData = bmp2.LockBits(new Rectangle(0, 0, bmp2.Width, bmp2.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user