public static PixelFormat GetFormatForBitDepths( PixelFormat format, ushort integerBits, ushort floatBits )
{
switch ( integerBits )
{
case 16:
switch ( format )
{
case PixelFormat.R8G8B8:
case PixelFormat.X8R8G8B8:
return PixelFormat.R5G6B5;
case PixelFormat.B8G8R8:
case PixelFormat.X8B8G8R8:
return PixelFormat.B5G6R5;
case PixelFormat.A8R8G8B8:
case PixelFormat.R8G8B8A8:
case PixelFormat.A8B8G8R8:
case PixelFormat.B8G8R8A8:
return PixelFormat.A4R4G4B4;
default:
// use the original format
break;
}
break;
case 32:
switch ( format )
{
case PixelFormat.R5G6B5:
return PixelFormat.X8R8G8B8;
case PixelFormat.B5G6R5:
return PixelFormat.X8B8G8R8;
case PixelFormat.A4R4G4B4:
return PixelFormat.A8R8G8B8;
case PixelFormat.A1R5G5B5:
return PixelFormat.A2R10G10B10;
default:
// use the original format
break;
}
break;
default:
// use the original format
break;
}
switch ( floatBits )
{
case 16:
switch ( format )
{
case PixelFormat.FLOAT32_R:
return PixelFormat.FLOAT16_R;
case PixelFormat.FLOAT32_RGB:
return PixelFormat.FLOAT16_RGB;
case PixelFormat.FLOAT32_RGBA:
return PixelFormat.FLOAT16_RGBA;
default:
// use original image format
break;
}
break;
case 32:
switch ( format )
{
case PixelFormat.FLOAT16_R:
return PixelFormat.FLOAT32_R;
case PixelFormat.FLOAT16_RGB:
return PixelFormat.FLOAT32_RGB;
case PixelFormat.FLOAT16_RGBA:
return PixelFormat.FLOAT32_RGBA;
default:
// use original image format
break;
}
break;
default:
// use original image format
break;
}
return format;
}
}