public Texture FromBitMap(List <byte[]> arrayFaces, TextureImporterSettings settings) { Texture tex = new Texture(); tex.Height = (uint)settings.TexHeight; tex.Width = (uint)settings.TexWidth; tex.Format = Format; tex.Name = settings.TexName; tex.Path = ""; tex.TextureData = new List <List <byte[]> >(); if (settings.MipCount == 0) { settings.MipCount = 1; } STChannelType[] channels = STGenericTexture.SetChannelsByFormat(TextureData.ConvertFormat(settings.Format)); tex.ChannelRed = ConvertChannel(channels[0]); tex.ChannelGreen = ConvertChannel(channels[1]); tex.ChannelBlue = ConvertChannel(channels[2]); tex.ChannelAlpha = ConvertChannel(channels[3]); tex.sparseBinding = settings.sparseBinding; tex.sparseResidency = settings.sparseResidency; tex.AccessFlags = settings.AccessFlags; tex.ArrayLength = settings.arrayLength; tex.MipCount = settings.MipCount; tex.Depth = settings.Depth; tex.Dim = settings.Dim; tex.Flags = settings.Flags; tex.TileMode = settings.TileMode; tex.textureLayout = settings.TextureLayout; tex.textureLayout2 = settings.TextureLayout2; tex.Swizzle = settings.Swizzle; tex.SurfaceDim = settings.SurfaceDim; tex.SampleCount = settings.SampleCount; tex.Regs = settings.Regs; tex.Pitch = settings.Pitch; tex.MipOffsets = new long[tex.MipCount]; for (int i = 0; i < arrayFaces.Count; i++) { List <byte[]> mipmaps = SwizzleSurfaceMipMaps(tex, arrayFaces[i], tex.MipCount); tex.TextureData.Add(mipmaps); //Combine mip map data byte[] combinedMips = Utils.CombineByteArray(mipmaps.ToArray()); tex.TextureData[i][0] = combinedMips; } return(tex); }
public Texture FromBitMap(byte[] data, TextureImporterSettings settings) { Texture tex = new Texture(); tex.Height = (uint)settings.TexHeight; tex.Width = (uint)settings.TexWidth; var formats = TextureData.GetSurfaceFormat(settings.Format, settings.FormatType); tex.Format = formats.Item1; tex.FormatType = formats.Item2; tex.Name = settings.TexName; tex.Path = ""; tex.TextureData = new List <List <byte[]> >(); if (settings.MipCount == 0) { settings.MipCount = 1; } STChannelType[] channels = STGenericTexture.SetChannelsByFormat(settings.Format); tex.ChannelRed = (ChannelType)channels[0]; tex.ChannelGreen = (ChannelType)channels[1]; tex.ChannelBlue = (ChannelType)channels[2]; tex.ChannelAlpha = (ChannelType)channels[3]; tex.sparseBinding = settings.sparseBinding; tex.sparseResidency = settings.sparseResidency; tex.AccessFlags = settings.AccessFlags; tex.ArrayLength = settings.arrayLength; tex.MipCount = settings.MipCount; tex.Depth = settings.Depth; tex.Dim = settings.Dim; tex.Flags = settings.Flags; tex.TileMode = settings.TileMode; tex.textureLayout = settings.TextureLayout; tex.textureLayout2 = settings.TextureLayout2; tex.Swizzle = settings.Swizzle; tex.SurfaceDim = settings.SurfaceDim; tex.SampleCount = settings.SampleCount; tex.Regs = settings.Regs; tex.Pitch = settings.Pitch; tex.MipOffsets = new long[tex.MipCount]; List <byte[]> arrayFaces = new List <byte[]>(); if (tex.ArrayLength > 1) { arrayFaces = DDS.GetArrayFaces(data, tex.ArrayLength); } else { arrayFaces.Add(data); } for (int i = 0; i < tex.ArrayLength; i++) { List <byte[]> mipmaps = SwizzleSurfaceMipMaps(tex, arrayFaces[i], tex.TileMode); tex.TextureData.Add(mipmaps); byte[] test = Combine(mipmaps); tex.TextureData[i][0] = test; } return(tex); }