Update DDS alpha mode metadata

- Make alpha mode 3 bits instead of 2
- Rename 4TH_CHANNEL to CUSTOM
- Reorder enum
This commit is contained in:
walbourn_cp
2013-04-11 15:23:54 -07:00
parent dc401291a1
commit 33db361592
6 changed files with 42 additions and 17 deletions

View File

@@ -103,7 +103,7 @@ struct DDS_PIXELFORMAT
enum DDS_MISC_FLAGS2
{
DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x3L,
DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L,
};
typedef struct
@@ -1329,7 +1329,15 @@ static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header )
if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )
{
auto d3d10ext = reinterpret_cast<const DDS_HEADER_DXT10*>( (const char*)header + sizeof(DDS_HEADER) );
return static_cast<DDS_ALPHA_MODE>(d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK);
auto mode = static_cast<DDS_ALPHA_MODE>( d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK );
switch( mode )
{
case DDS_ALPHA_MODE_STRAIGHT:
case DDS_ALPHA_MODE_PREMULTIPLIED:
case DDS_ALPHA_MODE_OPAQUE:
case DDS_ALPHA_MODE_CUSTOM:
return mode;
}
}
else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC )
|| ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == header->ddspf.fourCC ) )
@@ -1338,7 +1346,7 @@ static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header )
}
}
return DDS_ALPHA_MODE_STRAIGHT;
return DDS_ALPHA_MODE_UNKNOWN;
}
@@ -1379,6 +1387,10 @@ HRESULT DirectX::CreateDDSTextureFromMemoryEx( ID3D11Device* d3dDevice,
{
*textureView = nullptr;
}
if ( alphaMode )
{
*alphaMode = DDS_ALPHA_MODE_UNKNOWN;
}
if (!d3dDevice || !ddsData || (!texture && !textureView))
{
@@ -1482,6 +1494,10 @@ HRESULT DirectX::CreateDDSTextureFromFileEx( ID3D11Device* d3dDevice,
{
*textureView = nullptr;
}
if ( alphaMode )
{
*alphaMode = DDS_ALPHA_MODE_UNKNOWN;
}
if (!d3dDevice || !fileName || (!texture && !textureView))
{

View File

@@ -44,10 +44,11 @@ namespace DirectX
{
enum DDS_ALPHA_MODE
{
DDS_ALPHA_MODE_STRAIGHT = 0,
DDS_ALPHA_MODE_PREMULTIPLIED = 1,
DDS_ALPHA_MODE_4TH_CHANNEL = 2,
DDS_ALPHA_MODE_UNKNOWN = 0,
DDS_ALPHA_MODE_STRAIGHT = 1,
DDS_ALPHA_MODE_PREMULTIPLIED = 2,
DDS_ALPHA_MODE_OPAQUE = 3,
DDS_ALPHA_MODE_CUSTOM = 4,
};
HRESULT CreateDDSTextureFromMemory( _In_ ID3D11Device* d3dDevice,