support B10GR11UF format
This commit is contained in:
parent
bbf1007ce5
commit
55029b0742
@ -47,10 +47,10 @@ bool ToILType(ILuint &type,const uint8 bits,const ColorDataType cdt)
|
|||||||
{
|
{
|
||||||
constexpr ILuint target_type[3][(uint)ColorDataType::END-1]=
|
constexpr ILuint target_type[3][(uint)ColorDataType::END-1]=
|
||||||
{
|
{
|
||||||
//UNORM SNORM UINT SINT, USCALE,SSCALE, UFLOAT SFLOAT
|
//UNORM SNORM UINT SINT, USCALE,SSCALE, UFLOAT SFLOAT
|
||||||
{IL_UNSIGNED_BYTE, IL_BYTE, IL_UNSIGNED_BYTE, IL_BYTE, 0,0, 0, 0},
|
/* 8 */{IL_UNSIGNED_BYTE, IL_BYTE, IL_UNSIGNED_BYTE, IL_BYTE, 0,0, 0, 0},
|
||||||
{IL_UNSIGNED_SHORT, IL_SHORT, IL_UNSIGNED_SHORT, IL_SHORT, 0,0, IL_HALF, IL_HALF},
|
/* 16 */{IL_UNSIGNED_SHORT, IL_SHORT, IL_UNSIGNED_SHORT, IL_SHORT, 0,0, IL_HALF, IL_HALF},
|
||||||
{IL_UNSIGNED_INT, IL_INT, IL_UNSIGNED_INT, IL_INT, 0,0, IL_FLOAT, IL_FLOAT}
|
/* 32 */{IL_UNSIGNED_INT, IL_INT, IL_UNSIGNED_INT, IL_INT, 0,0, IL_FLOAT, IL_FLOAT}
|
||||||
};
|
};
|
||||||
|
|
||||||
if(bits<=8 )type=target_type[0][(uint)cdt-1];else
|
if(bits<=8 )type=target_type[0][(uint)cdt-1];else
|
||||||
|
@ -21,6 +21,25 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bit depth Sign bit present Exponent bits Mantissa bits
|
||||||
|
// 32 Yes 8 23
|
||||||
|
// 16 Yes 5 10
|
||||||
|
// 11 No 5 6
|
||||||
|
// 10 No 5 5
|
||||||
|
|
||||||
|
void RGB16FtoB10GR11UF(uint32 *target,uint16 *src,uint size)
|
||||||
|
{
|
||||||
|
for(uint i=0;i<size;i++)
|
||||||
|
{
|
||||||
|
*target=((src[2]&0x7FE0)<<17)
|
||||||
|
|((src[1]&0x7FF0)<<7)
|
||||||
|
| (src[0]&0x7FF0)>>4;
|
||||||
|
|
||||||
|
++target;
|
||||||
|
src+=3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
bool Write() override
|
bool Write() override
|
||||||
@ -48,6 +67,16 @@ public:
|
|||||||
|
|
||||||
return TextureFileCreater::Write(rgb565);
|
return TextureFileCreater::Write(rgb565);
|
||||||
}
|
}
|
||||||
|
else if(fmt->format==ColorFormat::B10GR11UF)
|
||||||
|
{
|
||||||
|
void *origin_rgb=image->GetRGB(IL_HALF);
|
||||||
|
|
||||||
|
AutoDelete<uint32> b10gr11=new uint32[image->pixel_total()];
|
||||||
|
|
||||||
|
RGB16FtoB10GR11UF(b10gr11,(uint16 *)origin_rgb,image->pixel_total());
|
||||||
|
|
||||||
|
return TextureFileCreater::Write(b10gr11);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_ERROR(OS_TEXT("Don't support this RGB format"));
|
LOG_ERROR(OS_TEXT("Don't support this RGB format"));
|
||||||
|
@ -46,7 +46,8 @@ namespace hgl
|
|||||||
{ColorFormat::RGB32F, "RGB32F", 3,{'R','G','B', 0 },{32,32,32, 0},ColorDataType::SFLOAT},
|
{ColorFormat::RGB32F, "RGB32F", 3,{'R','G','B', 0 },{32,32,32, 0},ColorDataType::SFLOAT},
|
||||||
{ColorFormat::RGBA32U, "RGBA32U", 4,{'R','G','B','A'},{32,32,32,32},ColorDataType::UINT},
|
{ColorFormat::RGBA32U, "RGBA32U", 4,{'R','G','B','A'},{32,32,32,32},ColorDataType::UINT},
|
||||||
{ColorFormat::RGBA32I, "RGBA32I", 4,{'R','G','B','A'},{32,32,32,32},ColorDataType::SINT},
|
{ColorFormat::RGBA32I, "RGBA32I", 4,{'R','G','B','A'},{32,32,32,32},ColorDataType::SINT},
|
||||||
{ColorFormat::RGBA32F, "RGBA32F", 4,{'R','G','B','A'},{32,32,32,32},ColorDataType::SFLOAT}
|
{ColorFormat::RGBA32F, "RGBA32F", 4,{'R','G','B','A'},{32,32,32,32},ColorDataType::SFLOAT},
|
||||||
|
{ColorFormat::B10GR11UF, "B10GR11UF", 3,{'B','G','R', 0 },{11,11,11, 0},ColorDataType::UFLOAT}
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr uint PixelFormatCount=sizeof(pf_list)/sizeof(PixelFormat);
|
constexpr uint PixelFormatCount=sizeof(pf_list)/sizeof(PixelFormat);
|
||||||
|
@ -33,6 +33,7 @@ enum class ColorFormat
|
|||||||
RGBA32U,
|
RGBA32U,
|
||||||
RGBA32I,
|
RGBA32I,
|
||||||
RGBA32F,
|
RGBA32F,
|
||||||
|
B10GR11UF,
|
||||||
|
|
||||||
END
|
END
|
||||||
};//enum class ColorFormat
|
};//enum class ColorFormat
|
||||||
|
Loading…
x
Reference in New Issue
Block a user