static DXGI_FORMAT
-ChooseConversionFormat(DXGI_FORMAT Format)
+ChooseConversionFormat(DXGI_FORMAT Format, unsigned &numChannels, image::ChannelType &channelType)
{
+ numChannels = 4;
+ channelType = image::TYPE_UNORM8;
+
switch (Format) {
// Float
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
case DXGI_FORMAT_BC6H_UF16:
case DXGI_FORMAT_BC6H_SF16:
- return DXGI_FORMAT_R8G8B8A8_UNORM;
+ channelType = image::TYPE_FLOAT;
+ return DXGI_FORMAT_R32G32B32A32_FLOAT;
// Unsigned normalized
case DXGI_FORMAT_R16G16B16A16_UNORM:
case DXGI_FORMAT_D24_UNORM_S8_UINT:
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
case DXGI_FORMAT_D16_UNORM:
- return DXGI_FORMAT_R8G8B8A8_UNORM;
+ numChannels = 1;
+ channelType = image::TYPE_FLOAT;
+ return DXGI_FORMAT_D32_FLOAT;
// Typeless
case DXGI_FORMAT_UNKNOWN:
UINT SrcPitch,
UINT Width, UINT Height)
{
+ unsigned numChannels;
+ image::ChannelType channelType;
- DXGI_FORMAT DstFormat = ChooseConversionFormat(SrcFormat);
+ DXGI_FORMAT DstFormat = ChooseConversionFormat(SrcFormat, numChannels, channelType);
if (DstFormat == DXGI_FORMAT_UNKNOWN) {
return NULL;
}
- image::Image *image = new image::Image(Width, Height, 4);
+ image::Image *image = new image::Image(Width, Height, numChannels, false, channelType);
if (!image) {
return NULL;
}