Switch-Toolbox/Switch_Toolbox_Library/Generics/GenericBitmapTexture.cs
KillzXGaming 67d1b6920a Some improvements from yesterday. Start to improve uv editor.
Basic tex 3ds support
BC4 textures will be rendered grayscale in opengl (not using opengl decoder)
Fix a few format issues with 3ds
Mip total method is one function in STGeneric texture
Weight format default to floats again until i find a proper fix for the 888 unform format.
2019-05-13 15:29:40 -04:00

74 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Switch_Toolbox.Library
{
//
// A class which can create generic texture instances from bitmaps for usage in opengl and image editors.
//
public class GenericBitmapTexture : STGenericTexture
{
public override bool CanEdit { get; set; } = true;
public override TEX_FORMAT[] SupportedFormats
{
get
{
return new TEX_FORMAT[] { TEX_FORMAT.R8G8B8A8_UNORM };
}
}
public byte[] ImageData;
public GenericBitmapTexture(byte[] FileData, int width, int height)
{
Format = TEX_FORMAT.R8G8B8A8_UNORM;
Width = (uint)width;
Height = (uint)height;
ImageData = DDSCompressor.CompressBlock(FileData, width, height,
DDS.DXGI_FORMAT.DXGI_FORMAT_R8G8B8A8_UNORM_SRGB);
}
public GenericBitmapTexture(string FileName) {
LoadBitmap(new Bitmap(FileName));
}
public GenericBitmapTexture(Bitmap Image) {
LoadBitmap(Image);
}
private void LoadBitmap(Bitmap Image)
{
Image = BitmapExtension.SwapBlueRedChannels(Image);
Format = TEX_FORMAT.R8G8B8A8_UNORM;
Width = (uint)Image.Width;
Height = (uint)Image.Height;
MipCount = 1;
ImageData = GenerateMipsAndCompress(Image, Format);
if (ImageData == null || ImageData.Length <= 0)
throw new Exception("Image failed to encode!");
}
public override void SetImageData(Bitmap bitmap, int ArrayLevel)
{
byte[] Data = BitmapExtension.ImageToByte(bitmap);
Width = (uint)bitmap.Width;
Height = (uint)bitmap.Height;
ImageData = DDSCompressor.EncodePixelBlock(Data, bitmap.Width, bitmap.Width, DDS.DXGI_FORMAT.DXGI_FORMAT_R8G8B8A8_UNORM_SRGB);
}
public override byte[] GetImageData(int ArrayLevel = 0, int MipLevel = 0)
{
return ImageData;
}
}
}