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
|
enum DDS_MISC_FLAGS2
|
||||||
{
|
{
|
||||||
DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x3L,
|
DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
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 )
|
if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )
|
||||||
{
|
{
|
||||||
auto d3d10ext = reinterpret_cast<const DDS_HEADER_DXT10*>( (const char*)header + sizeof(DDS_HEADER) );
|
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 )
|
else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC )
|
||||||
|| ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == 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;
|
*textureView = nullptr;
|
||||||
}
|
}
|
||||||
|
if ( alphaMode )
|
||||||
|
{
|
||||||
|
*alphaMode = DDS_ALPHA_MODE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
if (!d3dDevice || !ddsData || (!texture && !textureView))
|
if (!d3dDevice || !ddsData || (!texture && !textureView))
|
||||||
{
|
{
|
||||||
@ -1482,6 +1494,10 @@ HRESULT DirectX::CreateDDSTextureFromFileEx( ID3D11Device* d3dDevice,
|
|||||||
{
|
{
|
||||||
*textureView = nullptr;
|
*textureView = nullptr;
|
||||||
}
|
}
|
||||||
|
if ( alphaMode )
|
||||||
|
{
|
||||||
|
*alphaMode = DDS_ALPHA_MODE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
if (!d3dDevice || !fileName || (!texture && !textureView))
|
if (!d3dDevice || !fileName || (!texture && !textureView))
|
||||||
{
|
{
|
||||||
|
@ -44,10 +44,11 @@ namespace DirectX
|
|||||||
{
|
{
|
||||||
enum DDS_ALPHA_MODE
|
enum DDS_ALPHA_MODE
|
||||||
{
|
{
|
||||||
DDS_ALPHA_MODE_STRAIGHT = 0,
|
DDS_ALPHA_MODE_UNKNOWN = 0,
|
||||||
DDS_ALPHA_MODE_PREMULTIPLIED = 1,
|
DDS_ALPHA_MODE_STRAIGHT = 1,
|
||||||
DDS_ALPHA_MODE_4TH_CHANNEL = 2,
|
DDS_ALPHA_MODE_PREMULTIPLIED = 2,
|
||||||
DDS_ALPHA_MODE_OPAQUE = 3,
|
DDS_ALPHA_MODE_OPAQUE = 3,
|
||||||
|
DDS_ALPHA_MODE_CUSTOM = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT CreateDDSTextureFromMemory( _In_ ID3D11Device* d3dDevice,
|
HRESULT CreateDDSTextureFromMemory( _In_ ID3D11Device* d3dDevice,
|
||||||
|
@ -184,15 +184,16 @@ enum DDS_RESOURCE_MISC_FLAG
|
|||||||
|
|
||||||
enum DDS_MISC_FLAGS2
|
enum DDS_MISC_FLAGS2
|
||||||
{
|
{
|
||||||
DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x3L,
|
DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum DDS_ALPHA_MODE
|
enum DDS_ALPHA_MODE
|
||||||
{
|
{
|
||||||
DDS_ALPHA_MODE_STRAIGHT = 0,
|
DDS_ALPHA_MODE_UNKNOWN = 0,
|
||||||
DDS_ALPHA_MODE_PREMULTIPLIED = 1,
|
DDS_ALPHA_MODE_STRAIGHT = 1,
|
||||||
DDS_ALPHA_MODE_4TH_CHANNEL = 2,
|
DDS_ALPHA_MODE_PREMULTIPLIED = 2,
|
||||||
DDS_ALPHA_MODE_OPAQUE = 3,
|
DDS_ALPHA_MODE_OPAQUE = 3,
|
||||||
|
DDS_ALPHA_MODE_CUSTOM = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DDS_HEADER
|
struct DDS_HEADER
|
||||||
|
@ -101,16 +101,17 @@ namespace DirectX
|
|||||||
|
|
||||||
enum TEX_MISC_FLAG2
|
enum TEX_MISC_FLAG2
|
||||||
{
|
{
|
||||||
TEX_MISC2_ALPHA_MODE_MASK = 0x3L,
|
TEX_MISC2_ALPHA_MODE_MASK = 0x7L,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TEX_ALPHA_MODE
|
enum TEX_ALPHA_MODE
|
||||||
// Matches DDS_ALPHA_MODE, encoded in MISC_FLAGS2
|
// Matches DDS_ALPHA_MODE, encoded in MISC_FLAGS2
|
||||||
{
|
{
|
||||||
TEX_ALPHA_MODE_STRAIGHT = 0,
|
TEX_ALPHA_MODE_UNKNOWN = 0,
|
||||||
TEX_ALPHA_MODE_PREMULTIPLIED = 1,
|
TEX_ALPHA_MODE_STRAIGHT = 1,
|
||||||
TEX_ALPHA_MODE_4TH_CHANNEL = 2,
|
TEX_ALPHA_MODE_PREMULTIPLIED = 2,
|
||||||
TEX_ALPHA_MODE_OPAQUE = 3,
|
TEX_ALPHA_MODE_OPAQUE = 3,
|
||||||
|
TEX_ALPHA_MODE_CUSTOM = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TexMetadata
|
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_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_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_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_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;
|
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_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_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_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_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 )
|
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) )
|
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
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user