Unident EnsureSetup in ImageHandler
This commit is contained in:
parent
9f99c6bd41
commit
af57499de9
1 changed files with 71 additions and 69 deletions
|
@ -38,79 +38,81 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
||||||
|
|
||||||
public void EnsureSetup(GalImage NewImage)
|
public void EnsureSetup(GalImage NewImage)
|
||||||
{
|
{
|
||||||
if (Width != NewImage.Width ||
|
if (Width == NewImage.Width &&
|
||||||
Height != NewImage.Height ||
|
Height == NewImage.Height &&
|
||||||
Format != NewImage.Format ||
|
Format == NewImage.Format &&
|
||||||
!Initialized)
|
Initialized)
|
||||||
{
|
{
|
||||||
(PixelInternalFormat InternalFormat, PixelFormat PixelFormat, PixelType PixelType) =
|
return;
|
||||||
OGLEnumConverter.GetImageFormat(NewImage.Format);
|
}
|
||||||
|
|
||||||
|
(PixelInternalFormat InternalFormat, PixelFormat PixelFormat, PixelType PixelType) =
|
||||||
|
OGLEnumConverter.GetImageFormat(NewImage.Format);
|
||||||
|
|
||||||
|
GL.BindTexture(TextureTarget.Texture2D, Handle);
|
||||||
|
|
||||||
|
if (Initialized)
|
||||||
|
{
|
||||||
|
if (CopyBuffer == 0)
|
||||||
|
{
|
||||||
|
CopyBuffer = GL.GenBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
int CurrentSize = Math.Max(ImageTable.GetImageSize(NewImage),
|
||||||
|
ImageTable.GetImageSize(Image));
|
||||||
|
|
||||||
|
GL.BindBuffer(BufferTarget.PixelPackBuffer, CopyBuffer);
|
||||||
|
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, CopyBuffer);
|
||||||
|
|
||||||
|
if (CopyBufferSize < CurrentSize)
|
||||||
|
{
|
||||||
|
CopyBufferSize = CurrentSize;
|
||||||
|
|
||||||
|
GL.BufferData(BufferTarget.PixelPackBuffer, CurrentSize, IntPtr.Zero, BufferUsageHint.StreamCopy);
|
||||||
|
}
|
||||||
|
|
||||||
|
GL.GetTexImage(TextureTarget.Texture2D, 0, this.PixelFormat, this.PixelType, IntPtr.Zero);
|
||||||
|
|
||||||
|
GL.DeleteTexture(Handle);
|
||||||
|
|
||||||
|
Handle = GL.GenTexture();
|
||||||
|
|
||||||
GL.BindTexture(TextureTarget.Texture2D, Handle);
|
GL.BindTexture(TextureTarget.Texture2D, Handle);
|
||||||
|
|
||||||
if (Initialized)
|
|
||||||
{
|
|
||||||
if (CopyBuffer == 0)
|
|
||||||
{
|
|
||||||
CopyBuffer = GL.GenBuffer();
|
|
||||||
}
|
|
||||||
|
|
||||||
int CurrentSize = Math.Max(ImageTable.GetImageSize(NewImage),
|
|
||||||
ImageTable.GetImageSize(Image));
|
|
||||||
|
|
||||||
GL.BindBuffer(BufferTarget.PixelPackBuffer, CopyBuffer);
|
|
||||||
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, CopyBuffer);
|
|
||||||
|
|
||||||
if (CopyBufferSize < CurrentSize)
|
|
||||||
{
|
|
||||||
CopyBufferSize = CurrentSize;
|
|
||||||
|
|
||||||
GL.BufferData(BufferTarget.PixelPackBuffer, CurrentSize, IntPtr.Zero, BufferUsageHint.StreamCopy);
|
|
||||||
}
|
|
||||||
|
|
||||||
GL.GetTexImage(TextureTarget.Texture2D, 0, this.PixelFormat, this.PixelType, IntPtr.Zero);
|
|
||||||
|
|
||||||
GL.DeleteTexture(Handle);
|
|
||||||
|
|
||||||
Handle = GL.GenTexture();
|
|
||||||
|
|
||||||
GL.BindTexture(TextureTarget.Texture2D, Handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
const int MinFilter = (int)TextureMinFilter.Linear;
|
|
||||||
const int MagFilter = (int)TextureMagFilter.Linear;
|
|
||||||
|
|
||||||
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, MinFilter);
|
|
||||||
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, MagFilter);
|
|
||||||
|
|
||||||
const int Level = 0;
|
|
||||||
const int Border = 0;
|
|
||||||
|
|
||||||
GL.TexImage2D(
|
|
||||||
TextureTarget.Texture2D,
|
|
||||||
Level,
|
|
||||||
InternalFormat,
|
|
||||||
NewImage.Width,
|
|
||||||
NewImage.Height,
|
|
||||||
Border,
|
|
||||||
PixelFormat,
|
|
||||||
PixelType,
|
|
||||||
IntPtr.Zero);
|
|
||||||
|
|
||||||
if (Initialized)
|
|
||||||
{
|
|
||||||
GL.BindBuffer(BufferTarget.PixelPackBuffer, 0);
|
|
||||||
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
Image = NewImage;
|
|
||||||
|
|
||||||
this.InternalFormat = InternalFormat;
|
|
||||||
this.PixelFormat = PixelFormat;
|
|
||||||
this.PixelType = PixelType;
|
|
||||||
|
|
||||||
Initialized = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const int MinFilter = (int)TextureMinFilter.Linear;
|
||||||
|
const int MagFilter = (int)TextureMagFilter.Linear;
|
||||||
|
|
||||||
|
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, MinFilter);
|
||||||
|
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, MagFilter);
|
||||||
|
|
||||||
|
const int Level = 0;
|
||||||
|
const int Border = 0;
|
||||||
|
|
||||||
|
GL.TexImage2D(
|
||||||
|
TextureTarget.Texture2D,
|
||||||
|
Level,
|
||||||
|
InternalFormat,
|
||||||
|
NewImage.Width,
|
||||||
|
NewImage.Height,
|
||||||
|
Border,
|
||||||
|
PixelFormat,
|
||||||
|
PixelType,
|
||||||
|
IntPtr.Zero);
|
||||||
|
|
||||||
|
if (Initialized)
|
||||||
|
{
|
||||||
|
GL.BindBuffer(BufferTarget.PixelPackBuffer, 0);
|
||||||
|
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Image = NewImage;
|
||||||
|
|
||||||
|
this.InternalFormat = InternalFormat;
|
||||||
|
this.PixelFormat = PixelFormat;
|
||||||
|
this.PixelType = PixelType;
|
||||||
|
|
||||||
|
Initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HasColor => ImageTable.HasColor(Image.Format);
|
public bool HasColor => ImageTable.HasColor(Image.Format);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue