Prevent failed images from loading in opengl
This commit is contained in:
parent
367e9a1287
commit
28e0edb8ad
@ -8,7 +8,7 @@ namespace Ryujinx.Graphics.Gal.Texture
|
|||||||
{
|
{
|
||||||
public class ASTCDecoderException : Exception
|
public class ASTCDecoderException : Exception
|
||||||
{
|
{
|
||||||
public ASTCDecoderException(string ExMsg) : base(ExMsg) { Toolbox.Library.Forms.STErrorDialog.Show(ExMsg, "", ExMsg); }
|
public ASTCDecoderException(string ExMsg) : base(ExMsg) {/* Toolbox.Library.Forms.STErrorDialog.Show(ExMsg, "", ExMsg);*/ }
|
||||||
}
|
}
|
||||||
|
|
||||||
//https://github.com/GammaUNC/FasTC/blob/master/ASTCEncoder/src/Decompressor.cpp
|
//https://github.com/GammaUNC/FasTC/blob/master/ASTCEncoder/src/Decompressor.cpp
|
||||||
@ -67,12 +67,12 @@ namespace Ryujinx.Graphics.Gal.Texture
|
|||||||
|
|
||||||
if (BlockX > 12 || BlockY > 12)
|
if (BlockX > 12 || BlockY > 12)
|
||||||
{
|
{
|
||||||
throw new ASTCDecoderException("Block size unsupported!");
|
throw new Exception("Block size unsupported!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BlockZ != 1 || Z != 1)
|
if (BlockZ != 1 || Z != 1)
|
||||||
{
|
{
|
||||||
throw new ASTCDecoderException("3D compressed textures unsupported!");
|
throw new Exception("3D compressed textures unsupported!");
|
||||||
}
|
}
|
||||||
|
|
||||||
using (MemoryStream OutputStream = new MemoryStream())
|
using (MemoryStream OutputStream = new MemoryStream())
|
||||||
@ -121,7 +121,7 @@ namespace Ryujinx.Graphics.Gal.Texture
|
|||||||
|
|
||||||
if (TexelParams.Error)
|
if (TexelParams.Error)
|
||||||
{
|
{
|
||||||
throw new ASTCDecoderException("Invalid block mode");
|
throw new Exception("Invalid block mode");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Console.WriteLine($"BlockWidth {BlockWidth} {BlockHeight} BlockHeight");
|
// Console.WriteLine($"BlockWidth {BlockWidth} {BlockHeight} BlockHeight");
|
||||||
@ -136,17 +136,17 @@ namespace Ryujinx.Graphics.Gal.Texture
|
|||||||
|
|
||||||
if (TexelParams.VoidExtentHDR)
|
if (TexelParams.VoidExtentHDR)
|
||||||
{
|
{
|
||||||
throw new ASTCDecoderException("HDR void extent blocks are unsupported!");
|
throw new Exception("HDR void extent blocks are unsupported!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TexelParams.Width > BlockWidth)
|
if (TexelParams.Width > BlockWidth)
|
||||||
{
|
{
|
||||||
throw new ASTCDecoderException("Texel weight grid width should be smaller than block width");
|
throw new Exception("Texel weight grid width should be smaller than block width");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TexelParams.Height > BlockHeight)
|
if (TexelParams.Height > BlockHeight)
|
||||||
{
|
{
|
||||||
throw new ASTCDecoderException("Texel weight grid height should be smaller than block height");
|
throw new Exception("Texel weight grid height should be smaller than block height");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read num partitions
|
// Read num partitions
|
||||||
@ -155,7 +155,7 @@ namespace Ryujinx.Graphics.Gal.Texture
|
|||||||
|
|
||||||
if (NumberPartitions == 4 && TexelParams.DualPlane)
|
if (NumberPartitions == 4 && TexelParams.DualPlane)
|
||||||
{
|
{
|
||||||
throw new ASTCDecoderException("Dual plane mode is incompatible with four partition blocks");
|
throw new Exception("Dual plane mode is incompatible with four partition blocks");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Based on the number of partitions, read the color endpoint mode for
|
// Based on the number of partitions, read the color endpoint mode for
|
||||||
|
@ -114,11 +114,12 @@ namespace Toolbox.Library.Rendering
|
|||||||
TexID = GenerateOpenGLTexture(this, bitmap);
|
TexID = GenerateOpenGLTexture(this, bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsFailedState = false;
|
||||||
private bool UseMipmaps = false;
|
private bool UseMipmaps = false;
|
||||||
private bool UseOpenGLDecoder = true;
|
private bool UseOpenGLDecoder = true;
|
||||||
public void LoadOpenGLTexture(STGenericTexture GenericTexture, int ArrayStartIndex = 0, bool LoadArrayLevels = false)
|
public void LoadOpenGLTexture(STGenericTexture GenericTexture, int ArrayStartIndex = 0, bool LoadArrayLevels = false)
|
||||||
{
|
{
|
||||||
if (!Runtime.OpenTKInitialized || GLInitialized || Runtime.UseLegacyGL)
|
if (!Runtime.OpenTKInitialized || GLInitialized || Runtime.UseLegacyGL || IsFailedState)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
width = (int)GenericTexture.Width;
|
width = (int)GenericTexture.Width;
|
||||||
@ -162,25 +163,27 @@ namespace Toolbox.Library.Rendering
|
|||||||
GenericTexture.ArrayCount = 1;
|
GenericTexture.ArrayCount = 1;
|
||||||
|
|
||||||
List<STGenericTexture.Surface> Surfaces = new List<STGenericTexture.Surface>();
|
List<STGenericTexture.Surface> Surfaces = new List<STGenericTexture.Surface>();
|
||||||
if (UseMipmaps && GenericTexture.ArrayCount <= 1)
|
try
|
||||||
{
|
{
|
||||||
//Load surfaces with mip maps
|
if (UseMipmaps && GenericTexture.ArrayCount <= 1)
|
||||||
Surfaces = GenericTexture.GetSurfaces(ArrayStartIndex, false, 6);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//Only load first mip level. Will be generated after
|
|
||||||
for (int i = 0; i < GenericTexture.ArrayCount; i++)
|
|
||||||
{
|
{
|
||||||
if (i >= ArrayStartIndex && i <= ArrayStartIndex + 6) //Only load up to 6 faces
|
//Load surfaces with mip maps
|
||||||
|
Surfaces = GenericTexture.GetSurfaces(ArrayStartIndex, false, 6);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Only load first mip level. Will be generated after
|
||||||
|
for (int i = 0; i < GenericTexture.ArrayCount; i++)
|
||||||
{
|
{
|
||||||
Surfaces.Add(new STGenericTexture.Surface()
|
if (i >= ArrayStartIndex && i <= ArrayStartIndex + 6) //Only load up to 6 faces
|
||||||
{
|
{
|
||||||
mipmaps = new List<byte[]>() { GenericTexture.GetImageData(i, 0) }
|
Surfaces.Add(new STGenericTexture.Surface()
|
||||||
});
|
{
|
||||||
|
mipmaps = new List<byte[]>() { GenericTexture.GetImageData(i, 0) }
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (Surfaces.Count == 0 || Surfaces[0].mipmaps[0].Length == 0)
|
if (Surfaces.Count == 0 || Surfaces[0].mipmaps[0].Length == 0)
|
||||||
return;
|
return;
|
||||||
@ -238,6 +241,14 @@ namespace Toolbox.Library.Rendering
|
|||||||
}
|
}
|
||||||
|
|
||||||
Surfaces.Clear();
|
Surfaces.Clear();
|
||||||
|
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
IsFailedState = true;
|
||||||
|
GLInitialized = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsPow2(int Value)
|
static bool IsPow2(int Value)
|
||||||
|
Loading…
Reference in New Issue
Block a user