mirror of
https://github.com/microsoft/DirectXTex.git
synced 2025-07-09 19:50:13 +02:00
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:
parent
dc401291a1
commit
33db361592
@ -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))
|
||||
{
|
||||
|
@ -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,
|
||||
|
@ -184,15 +184,16 @@ enum DDS_RESOURCE_MISC_FLAG
|
||||
|
||||
enum DDS_MISC_FLAGS2
|
||||
{
|
||||
DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x3L,
|
||||
DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L,
|
||||
};
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
struct DDS_HEADER
|
||||
|
@ -101,16 +101,17 @@ namespace DirectX
|
||||
|
||||
enum TEX_MISC_FLAG2
|
||||
{
|
||||
TEX_MISC2_ALPHA_MODE_MASK = 0x3L,
|
||||
TEX_MISC2_ALPHA_MODE_MASK = 0x7L,
|
||||
};
|
||||
|
||||
enum TEX_ALPHA_MODE
|
||||
// Matches DDS_ALPHA_MODE, encoded in MISC_FLAGS2
|
||||
{
|
||||
TEX_ALPHA_MODE_STRAIGHT = 0,
|
||||
TEX_ALPHA_MODE_PREMULTIPLIED = 1,
|
||||
TEX_ALPHA_MODE_4TH_CHANNEL = 2,
|
||||
TEX_ALPHA_MODE_UNKNOWN = 0,
|
||||
TEX_ALPHA_MODE_STRAIGHT = 1,
|
||||
TEX_ALPHA_MODE_PREMULTIPLIED = 2,
|
||||
TEX_ALPHA_MODE_OPAQUE = 3,
|
||||
TEX_ALPHA_MODE_CUSTOM = 4,
|
||||
};
|
||||
|
||||
struct TexMetadata
|
||||
|
@ -315,10 +315,11 @@ static HRESULT _DecodeDDSHeader( _In_reads_bytes_(size) LPCVOID pSource, size_t
|
||||
|
||||
static_assert( TEX_MISC2_ALPHA_MODE_MASK == DDS_MISC_FLAGS2_ALPHA_MODE_MASK, "DDS header mismatch");
|
||||
|
||||
static_assert( TEX_ALPHA_MODE_UNKNOWN == DDS_ALPHA_MODE_UNKNOWN, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_STRAIGHT == DDS_ALPHA_MODE_STRAIGHT, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_PREMULTIPLIED == DDS_ALPHA_MODE_PREMULTIPLIED, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_4TH_CHANNEL == DDS_ALPHA_MODE_4TH_CHANNEL, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_OPAQUE == DDS_ALPHA_MODE_OPAQUE, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_CUSTOM == DDS_ALPHA_MODE_CUSTOM, "DDS header mismatch");
|
||||
|
||||
metadata.miscFlags2 = d3d10ext->miscFlags2;
|
||||
}
|
||||
@ -637,10 +638,11 @@ HRESULT _EncodeDDSHeader( const TexMetadata& metadata, DWORD flags,
|
||||
|
||||
static_assert( TEX_MISC2_ALPHA_MODE_MASK == DDS_MISC_FLAGS2_ALPHA_MODE_MASK, "DDS header mismatch");
|
||||
|
||||
static_assert( TEX_ALPHA_MODE_UNKNOWN == DDS_ALPHA_MODE_UNKNOWN, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_STRAIGHT == DDS_ALPHA_MODE_STRAIGHT, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_PREMULTIPLIED == DDS_ALPHA_MODE_PREMULTIPLIED, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_4TH_CHANNEL == DDS_ALPHA_MODE_4TH_CHANNEL, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_OPAQUE == DDS_ALPHA_MODE_OPAQUE, "DDS header mismatch");
|
||||
static_assert( TEX_ALPHA_MODE_CUSTOM == DDS_ALPHA_MODE_CUSTOM, "DDS header mismatch");
|
||||
|
||||
if ( flags & DDS_FLAGS_FORCE_DX10_EXT_MISC2 )
|
||||
{
|
||||
|
@ -1080,7 +1080,11 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
|
||||
}
|
||||
else if ( dwOptions & (1 << OPT_SEPALPHA) )
|
||||
{
|
||||
info.SetAlphaMode(TEX_ALPHA_MODE_4TH_CHANNEL);
|
||||
info.SetAlphaMode(TEX_ALPHA_MODE_CUSTOM);
|
||||
}
|
||||
else
|
||||
{
|
||||
info.SetAlphaMode(TEX_ALPHA_MODE_STRAIGHT);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user