public DDS_PIXELFORMAT ( ImageEngineFormat surfaceFormat, List |
||
surfaceFormat | ImageEngineFormat | Format to base PixelHeader on. |
customMasks | List |
Custom user defined masks for colours. |
return | System |
public DDS_PIXELFORMAT(ImageEngineFormat surfaceFormat, List<uint> customMasks = null)
: this()
{
dwSize = 32;
dwFourCC = ParseFormatToFourCC(surfaceFormat);
if (dwFourCC != FourCC.Unknown)
dwFlags = DDS_PFdwFlags.DDPF_FOURCC;
switch (surfaceFormat)
{
// Compressed formats don't need anything written here since pitch/linear size is unreliable. Why bother?
#region Uncompressed
case ImageEngineFormat.DDS_G8_L8:
dwFlags = DDS_PFdwFlags.DDPF_LUMINANCE;
dwRGBBitCount = 8;
dwRBitMask = 0xFF;
break;
case ImageEngineFormat.DDS_ARGB:
dwFlags = DDS_PFdwFlags.DDPF_ALPHAPIXELS | DDS_PFdwFlags.DDPF_RGB;
dwRGBBitCount = 32;
dwABitMask = 0xFF000000;
dwRBitMask = 0x00FF0000;
dwGBitMask = 0x0000FF00;
dwBBitMask = 0x000000FF;
break;
case ImageEngineFormat.DDS_V8U8:
dwFlags = DDS_PFdwFlags.DDPF_SIGNED;
dwRGBBitCount = 16;
dwRBitMask = 0x00FF;
dwGBitMask = 0xFF00;
break;
case ImageEngineFormat.DDS_A8L8:
dwFlags = DDS_PFdwFlags.DDPF_LUMINANCE | DDS_PFdwFlags.DDPF_ALPHAPIXELS;
dwRGBBitCount = 16;
dwABitMask = 0xFF00;
dwRBitMask = 0x00FF;
break;
case ImageEngineFormat.DDS_RGB:
dwFlags = DDS_PFdwFlags.DDPF_RGB;
dwRBitMask = 0xFF0000;
dwGBitMask = 0x00FF00;
dwBBitMask = 0x0000FF;
dwRGBBitCount = 24;
break;
case ImageEngineFormat.DDS_CUSTOM:
if (customMasks != null)
{
int numChannels = customMasks.Where(mask => mask != 0).Count();
dwABitMask = customMasks[0];
dwRBitMask = customMasks[1];
dwGBitMask = customMasks[2];
dwBBitMask = customMasks[3];
dwRGBBitCount = 8 * numChannels;
if (numChannels == 1)
dwFlags = DDS_PFdwFlags.DDPF_LUMINANCE;
else if (numChannels == 2)
dwFlags = DDS_PFdwFlags.DDPF_LUMINANCE | DDS_PFdwFlags.DDPF_ALPHAPIXELS;
}
break;
#endregion Uncompressed
}
}
DDS_Header.DDS_PIXELFORMAT::DDS_PIXELFORMAT ( byte temp ) : System |