diff --git a/cmake/FindDirectXTex.cmake b/cmake/FindDirectXTex.cmake deleted file mode 100644 index cb8c5c8..0000000 --- a/cmake/FindDirectXTex.cmake +++ /dev/null @@ -1,15 +0,0 @@ -set(DirectXTex_INCLUDE_DIR ${DirectXTex_DIR}/include) -set(DirectXTex_LIBRARY_DIR ${DirectXTex_DIR}/lib) -set(DirectXTex_VERSION ${PC_modorganizer_VERSION}) - -mark_as_advanced(DirectXTex_FOUND DirectXTex_DIR DirectXTex_INCLUDE_DIR DirectXTex_LIBRARY_DIR DirectXTex_VERSION) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DirectXTex - REQUIRED_VARS DirectXTex_DIR DirectXTex_INCLUDE_DIR DirectXTex_LIBRARY_DIR - VERSION_VAR DirectXTex_VERSION -) - -if(DirectXTex_FOUND) - set(DirectXTex_INCLUDE_DIRS ${modorganizer_INCLUDE_DIR}) -endif() diff --git a/cmake/GoogleTest-CMakeLists.txt.in b/cmake/GoogleTest-CMakeLists.txt.in deleted file mode 100644 index 0ed8b37..0000000 --- a/cmake/GoogleTest-CMakeLists.txt.in +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.5.0) - -project(googletest-download NONE) - -include(ExternalProject) -ExternalProject_Add(googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG master - SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" -) \ No newline at end of file diff --git a/lib/DirectXTex.lib b/lib/DirectXTex.lib deleted file mode 100644 index 635524f..0000000 Binary files a/lib/DirectXTex.lib and /dev/null differ diff --git a/lib/DirectXTex.pdb b/lib/DirectXTex.pdb deleted file mode 100644 index f129c0a..0000000 Binary files a/lib/DirectXTex.pdb and /dev/null differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b1ea3c0..59ffc74 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,13 +2,10 @@ cmake_minimum_required(VERSION 3.16) add_library(bsa_packer SHARED) mo2_configure_plugin(bsa_packer WARNINGS OFF - PUBLIC_DEPENDS libbsarch - PRIVATE_DEPENDS boost Qt::Concurrent) + PRIVATE_DEPENDS boost Qt::Concurrent libbsarch) target_include_directories(bsa_packer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} PRIVATE ${BOOST_DI_ROOT}/include) target_compile_definitions(bsa_packer PRIVATE BSAPACKER_LIBRARY) -target_link_libraries(bsa_packer - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../lib/DirectXTex.lib) mo2_install_target(bsa_packer) diff --git a/src/DirectXTex.h b/src/DirectXTex.h deleted file mode 100644 index 7ffa7db..0000000 --- a/src/DirectXTex.h +++ /dev/null @@ -1,783 +0,0 @@ -//------------------------------------------------------------------------------------- -// DirectXTex.h -// -// DirectX Texture Library -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// http://go.microsoft.com/fwlink/?LinkId=248926 -//------------------------------------------------------------------------------------- - -#pragma once - -#include - -#include -#include -#include - -#if !defined(__d3d11_h__) && !defined(__d3d11_x_h__) && !defined(__d3d12_h__) && !defined(__d3d12_x_h__) -#if defined(_XBOX_ONE) && defined(_TITLE) -#include -#else -#include -#endif -#endif - -#include - -#include - -#define DIRECTX_TEX_VERSION 162 - -struct IWICImagingFactory; -struct IWICMetadataQueryReader; - - -namespace DirectX -{ - - //--------------------------------------------------------------------------------- - // DXGI Format Utilities - bool __cdecl IsValid(_In_ DXGI_FORMAT fmt); - bool __cdecl IsCompressed(_In_ DXGI_FORMAT fmt); - bool __cdecl IsPacked(_In_ DXGI_FORMAT fmt); - bool __cdecl IsVideo(_In_ DXGI_FORMAT fmt); - bool __cdecl IsPlanar(_In_ DXGI_FORMAT fmt); - bool __cdecl IsPalettized(_In_ DXGI_FORMAT fmt); - bool __cdecl IsDepthStencil(_In_ DXGI_FORMAT fmt); - bool __cdecl IsSRGB(_In_ DXGI_FORMAT fmt); - bool __cdecl IsTypeless(_In_ DXGI_FORMAT fmt, _In_ bool partialTypeless = true); - - bool __cdecl HasAlpha(_In_ DXGI_FORMAT fmt); - - size_t __cdecl BitsPerPixel(_In_ DXGI_FORMAT fmt); - - size_t __cdecl BitsPerColor(_In_ DXGI_FORMAT fmt); - - enum CP_FLAGS - { - CP_FLAGS_NONE = 0x0, // Normal operation - CP_FLAGS_LEGACY_DWORD = 0x1, // Assume pitch is DWORD aligned instead of BYTE aligned - CP_FLAGS_PARAGRAPH = 0x2, // Assume pitch is 16-byte aligned instead of BYTE aligned - CP_FLAGS_YMM = 0x4, // Assume pitch is 32-byte aligned instead of BYTE aligned - CP_FLAGS_ZMM = 0x8, // Assume pitch is 64-byte aligned instead of BYTE aligned - CP_FLAGS_PAGE4K = 0x200, // Assume pitch is 4096-byte aligned instead of BYTE aligned - CP_FLAGS_BAD_DXTN_TAILS = 0x1000, // BC formats with malformed mipchain blocks smaller than 4x4 - CP_FLAGS_24BPP = 0x10000, // Override with a legacy 24 bits-per-pixel format size - CP_FLAGS_16BPP = 0x20000, // Override with a legacy 16 bits-per-pixel format size - CP_FLAGS_8BPP = 0x40000, // Override with a legacy 8 bits-per-pixel format size - }; - - HRESULT __cdecl ComputePitch( - _In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, - _Out_ size_t& rowPitch, _Out_ size_t& slicePitch, _In_ DWORD flags = CP_FLAGS_NONE); - - size_t __cdecl ComputeScanlines(_In_ DXGI_FORMAT fmt, _In_ size_t height); - - DXGI_FORMAT __cdecl MakeSRGB(_In_ DXGI_FORMAT fmt); - DXGI_FORMAT __cdecl MakeTypeless(_In_ DXGI_FORMAT fmt); - DXGI_FORMAT __cdecl MakeTypelessUNORM(_In_ DXGI_FORMAT fmt); - DXGI_FORMAT __cdecl MakeTypelessFLOAT(_In_ DXGI_FORMAT fmt); - - //--------------------------------------------------------------------------------- - // Texture metadata - enum TEX_DIMENSION - // Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION - { - TEX_DIMENSION_TEXTURE1D = 2, - TEX_DIMENSION_TEXTURE2D = 3, - TEX_DIMENSION_TEXTURE3D = 4, - }; - - enum TEX_MISC_FLAG - // Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG - { - TEX_MISC_TEXTURECUBE = 0x4L, - }; - - enum TEX_MISC_FLAG2 - { - TEX_MISC2_ALPHA_MODE_MASK = 0x7L, - }; - - enum TEX_ALPHA_MODE - // Matches DDS_ALPHA_MODE, encoded in MISC_FLAGS2 - { - 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 - { - size_t width; - size_t height; // Should be 1 for 1D textures - size_t depth; // Should be 1 for 1D or 2D textures - size_t arraySize; // For cubemap, this is a multiple of 6 - size_t mipLevels; - uint32_t miscFlags; - uint32_t miscFlags2; - DXGI_FORMAT format; - TEX_DIMENSION dimension; - - size_t __cdecl ComputeIndex(_In_ size_t mip, _In_ size_t item, _In_ size_t slice) const; - // Returns size_t(-1) to indicate an out-of-range error - - bool __cdecl IsCubemap() const { return (miscFlags & TEX_MISC_TEXTURECUBE) != 0; } - // Helper for miscFlags - - bool __cdecl IsPMAlpha() const { return ((miscFlags2 & TEX_MISC2_ALPHA_MODE_MASK) == TEX_ALPHA_MODE_PREMULTIPLIED) != 0; } - void __cdecl SetAlphaMode(TEX_ALPHA_MODE mode) { miscFlags2 = (miscFlags2 & ~static_cast(TEX_MISC2_ALPHA_MODE_MASK)) | static_cast(mode); } - TEX_ALPHA_MODE __cdecl GetAlphaMode() const { return static_cast(miscFlags2 & TEX_MISC2_ALPHA_MODE_MASK); } - // Helpers for miscFlags2 - - bool __cdecl IsVolumemap() const { return (dimension == TEX_DIMENSION_TEXTURE3D); } - // Helper for dimension - }; - - enum DDS_FLAGS - { - DDS_FLAGS_NONE = 0x0, - - DDS_FLAGS_LEGACY_DWORD = 0x1, - // Assume pitch is DWORD aligned instead of BYTE aligned (used by some legacy DDS files) - - DDS_FLAGS_NO_LEGACY_EXPANSION = 0x2, - // Do not implicitly convert legacy formats that result in larger pixel sizes (24 bpp, 3:3:2, A8L8, A4L4, P8, A8P8) - - DDS_FLAGS_NO_R10B10G10A2_FIXUP = 0x4, - // Do not use work-around for long-standing D3DX DDS file format issue which reversed the 10:10:10:2 color order masks - - DDS_FLAGS_FORCE_RGB = 0x8, - // Convert DXGI 1.1 BGR formats to DXGI_FORMAT_R8G8B8A8_UNORM to avoid use of optional WDDM 1.1 formats - - DDS_FLAGS_NO_16BPP = 0x10, - // Conversions avoid use of 565, 5551, and 4444 formats and instead expand to 8888 to avoid use of optional WDDM 1.2 formats - - DDS_FLAGS_EXPAND_LUMINANCE = 0x20, - // When loading legacy luminance formats expand replicating the color channels rather than leaving them packed (L8, L16, A8L8) - - DDS_FLAGS_BAD_DXTN_TAILS = 0x40, - // Some older DXTn DDS files incorrectly handle mipchain tails for blocks smaller than 4x4 - - DDS_FLAGS_FORCE_DX10_EXT = 0x10000, - // Always use the 'DX10' header extension for DDS writer (i.e. don't try to write DX9 compatible DDS files) - - DDS_FLAGS_FORCE_DX10_EXT_MISC2 = 0x20000, - // DDS_FLAGS_FORCE_DX10_EXT including miscFlags2 information (result may not be compatible with D3DX10 or D3DX11) - }; - - enum WIC_FLAGS - { - WIC_FLAGS_NONE = 0x0, - - WIC_FLAGS_FORCE_RGB = 0x1, - // Loads DXGI 1.1 BGR formats as DXGI_FORMAT_R8G8B8A8_UNORM to avoid use of optional WDDM 1.1 formats - - WIC_FLAGS_NO_X2_BIAS = 0x2, - // Loads DXGI 1.1 X2 10:10:10:2 format as DXGI_FORMAT_R10G10B10A2_UNORM - - WIC_FLAGS_NO_16BPP = 0x4, - // Loads 565, 5551, and 4444 formats as 8888 to avoid use of optional WDDM 1.2 formats - - WIC_FLAGS_ALLOW_MONO = 0x8, - // Loads 1-bit monochrome (black & white) as R1_UNORM rather than 8-bit grayscale - - WIC_FLAGS_ALL_FRAMES = 0x10, - // Loads all images in a multi-frame file, converting/resizing to match the first frame as needed, defaults to 0th frame otherwise - - WIC_FLAGS_IGNORE_SRGB = 0x20, - // Ignores sRGB metadata if present in the file - - WIC_FLAGS_FORCE_SRGB = 0x40, - // Writes sRGB metadata into the file reguardless of format - - WIC_FLAGS_FORCE_LINEAR = 0x80, - // Writes linear gamma metadata into the file reguardless of format - - WIC_FLAGS_DITHER = 0x10000, - // Use ordered 4x4 dithering for any required conversions - - WIC_FLAGS_DITHER_DIFFUSION = 0x20000, - // Use error-diffusion dithering for any required conversions - - WIC_FLAGS_FILTER_POINT = 0x100000, - WIC_FLAGS_FILTER_LINEAR = 0x200000, - WIC_FLAGS_FILTER_CUBIC = 0x300000, - WIC_FLAGS_FILTER_FANT = 0x400000, // Combination of Linear and Box filter - // Filtering mode to use for any required image resizing (only needed when loading arrays of differently sized images; defaults to Fant) - }; - - HRESULT __cdecl GetMetadataFromDDSMemory( - _In_reads_bytes_(size) const void* pSource, _In_ size_t size, - _In_ DWORD flags, - _Out_ TexMetadata& metadata); - HRESULT __cdecl GetMetadataFromDDSFile( - _In_z_ const wchar_t* szFile, - _In_ DWORD flags, - _Out_ TexMetadata& metadata); - - HRESULT __cdecl GetMetadataFromHDRMemory( - _In_reads_bytes_(size) const void* pSource, _In_ size_t size, - _Out_ TexMetadata& metadata); - HRESULT __cdecl GetMetadataFromHDRFile( - _In_z_ const wchar_t* szFile, - _Out_ TexMetadata& metadata); - - HRESULT __cdecl GetMetadataFromTGAMemory( - _In_reads_bytes_(size) const void* pSource, _In_ size_t size, - _Out_ TexMetadata& metadata); - HRESULT __cdecl GetMetadataFromTGAFile( - _In_z_ const wchar_t* szFile, - _Out_ TexMetadata& metadata); - - HRESULT __cdecl GetMetadataFromWICMemory( - _In_reads_bytes_(size) const void* pSource, _In_ size_t size, - _In_ DWORD flags, - _Out_ TexMetadata& metadata, - _In_opt_ std::function getMQR = nullptr); - - HRESULT __cdecl GetMetadataFromWICFile( - _In_z_ const wchar_t* szFile, - _In_ DWORD flags, - _Out_ TexMetadata& metadata, - _In_opt_ std::function getMQR = nullptr); - - //--------------------------------------------------------------------------------- - // Bitmap image container - struct Image - { - size_t width; - size_t height; - DXGI_FORMAT format; - size_t rowPitch; - size_t slicePitch; - uint8_t* pixels; - }; - - class ScratchImage - { - public: - ScratchImage() noexcept - : m_nimages(0), m_size(0), m_metadata{}, m_image(nullptr), m_memory(nullptr) {} - ScratchImage(ScratchImage&& moveFrom) noexcept - : m_nimages(0), m_size(0), m_metadata{}, m_image(nullptr), m_memory(nullptr) { *this = std::move(moveFrom); } - ~ScratchImage() { Release(); } - - ScratchImage& __cdecl operator= (ScratchImage&& moveFrom) noexcept; - - ScratchImage(const ScratchImage&) = delete; - ScratchImage& operator=(const ScratchImage&) = delete; - - HRESULT __cdecl Initialize(_In_ const TexMetadata& mdata, _In_ DWORD flags = CP_FLAGS_NONE); - - HRESULT __cdecl Initialize1D(_In_ DXGI_FORMAT fmt, _In_ size_t length, _In_ size_t arraySize, _In_ size_t mipLevels, _In_ DWORD flags = CP_FLAGS_NONE); - HRESULT __cdecl Initialize2D(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t arraySize, _In_ size_t mipLevels, _In_ DWORD flags = CP_FLAGS_NONE); - HRESULT __cdecl Initialize3D(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t depth, _In_ size_t mipLevels, _In_ DWORD flags = CP_FLAGS_NONE); - HRESULT __cdecl InitializeCube(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t nCubes, _In_ size_t mipLevels, _In_ DWORD flags = CP_FLAGS_NONE); - - HRESULT __cdecl InitializeFromImage(_In_ const Image& srcImage, _In_ bool allow1D = false, _In_ DWORD flags = CP_FLAGS_NONE); - HRESULT __cdecl InitializeArrayFromImages(_In_reads_(nImages) const Image* images, _In_ size_t nImages, _In_ bool allow1D = false, _In_ DWORD flags = CP_FLAGS_NONE); - HRESULT __cdecl InitializeCubeFromImages(_In_reads_(nImages) const Image* images, _In_ size_t nImages, _In_ DWORD flags = CP_FLAGS_NONE); - HRESULT __cdecl Initialize3DFromImages(_In_reads_(depth) const Image* images, _In_ size_t depth, _In_ DWORD flags = CP_FLAGS_NONE); - - void __cdecl Release(); - - bool __cdecl OverrideFormat(_In_ DXGI_FORMAT f); - - const TexMetadata& __cdecl GetMetadata() const { return m_metadata; } - const Image* __cdecl GetImage(_In_ size_t mip, _In_ size_t item, _In_ size_t slice) const; - - const Image* __cdecl GetImages() const { return m_image; } - size_t __cdecl GetImageCount() const { return m_nimages; } - - uint8_t* __cdecl GetPixels() const { return m_memory; } - size_t __cdecl GetPixelsSize() const { return m_size; } - - bool __cdecl IsAlphaAllOpaque() const; - - private: - size_t m_nimages; - size_t m_size; - TexMetadata m_metadata; - Image* m_image; - uint8_t* m_memory; - }; - - //--------------------------------------------------------------------------------- - // Memory blob (allocated buffer pointer is always 16-byte aligned) - class Blob - { - public: - Blob() noexcept : m_buffer(nullptr), m_size(0) {} - Blob(Blob&& moveFrom) noexcept : m_buffer(nullptr), m_size(0) { *this = std::move(moveFrom); } - ~Blob() { Release(); } - - Blob& __cdecl operator= (Blob&& moveFrom) noexcept; - - Blob(const Blob&) = delete; - Blob& operator=(const Blob&) = delete; - - HRESULT __cdecl Initialize(_In_ size_t size); - - void __cdecl Release(); - - void *__cdecl GetBufferPointer() const { return m_buffer; } - size_t __cdecl GetBufferSize() const { return m_size; } - - HRESULT __cdecl Trim(size_t size); - - private: - void* m_buffer; - size_t m_size; - }; - - //--------------------------------------------------------------------------------- - // Image I/O - - // DDS operations - HRESULT __cdecl LoadFromDDSMemory( - _In_reads_bytes_(size) const void* pSource, _In_ size_t size, - _In_ DWORD flags, - _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); - HRESULT __cdecl LoadFromDDSFile( - _In_z_ const wchar_t* szFile, - _In_ DWORD flags, - _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); - - HRESULT __cdecl SaveToDDSMemory( - _In_ const Image& image, - _In_ DWORD flags, - _Out_ Blob& blob); - HRESULT __cdecl SaveToDDSMemory( - _In_reads_(nimages) const Image* images, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DWORD flags, - _Out_ Blob& blob); - - HRESULT __cdecl SaveToDDSFile(_In_ const Image& image, _In_ DWORD flags, _In_z_ const wchar_t* szFile); - HRESULT __cdecl SaveToDDSFile( - _In_reads_(nimages) const Image* images, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DWORD flags, _In_z_ const wchar_t* szFile); - - // HDR operations - HRESULT __cdecl LoadFromHDRMemory( - _In_reads_bytes_(size) const void* pSource, _In_ size_t size, - _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); - HRESULT __cdecl LoadFromHDRFile( - _In_z_ const wchar_t* szFile, - _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); - - HRESULT __cdecl SaveToHDRMemory(_In_ const Image& image, _Out_ Blob& blob); - HRESULT __cdecl SaveToHDRFile(_In_ const Image& image, _In_z_ const wchar_t* szFile); - - // TGA operations - HRESULT __cdecl LoadFromTGAMemory( - _In_reads_bytes_(size) const void* pSource, _In_ size_t size, - _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); - HRESULT __cdecl LoadFromTGAFile( - _In_z_ const wchar_t* szFile, - _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); - - HRESULT __cdecl SaveToTGAMemory(_In_ const Image& image, _Out_ Blob& blob, _In_opt_ const TexMetadata* metadata = nullptr); - HRESULT __cdecl SaveToTGAFile(_In_ const Image& image, _In_z_ const wchar_t* szFile, _In_opt_ const TexMetadata* metadata = nullptr); - - // WIC operations - HRESULT __cdecl LoadFromWICMemory( - _In_reads_bytes_(size) const void* pSource, _In_ size_t size, - _In_ DWORD flags, - _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image, - _In_opt_ std::function getMQR = nullptr); - HRESULT __cdecl LoadFromWICFile( - _In_z_ const wchar_t* szFile, _In_ DWORD flags, - _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image, - _In_opt_ std::function getMQR = nullptr); - - HRESULT __cdecl SaveToWICMemory( - _In_ const Image& image, _In_ DWORD flags, _In_ REFGUID guidContainerFormat, - _Out_ Blob& blob, _In_opt_ const GUID* targetFormat = nullptr, - _In_opt_ std::function setCustomProps = nullptr); - HRESULT __cdecl SaveToWICMemory( - _In_count_(nimages) const Image* images, _In_ size_t nimages, - _In_ DWORD flags, _In_ REFGUID guidContainerFormat, - _Out_ Blob& blob, _In_opt_ const GUID* targetFormat = nullptr, - _In_opt_ std::function setCustomProps = nullptr); - - HRESULT __cdecl SaveToWICFile( - _In_ const Image& image, _In_ DWORD flags, _In_ REFGUID guidContainerFormat, - _In_z_ const wchar_t* szFile, _In_opt_ const GUID* targetFormat = nullptr, - _In_opt_ std::function setCustomProps = nullptr); - HRESULT __cdecl SaveToWICFile( - _In_count_(nimages) const Image* images, _In_ size_t nimages, - _In_ DWORD flags, _In_ REFGUID guidContainerFormat, - _In_z_ const wchar_t* szFile, _In_opt_ const GUID* targetFormat = nullptr, - _In_opt_ std::function setCustomProps = nullptr); - - //--------------------------------------------------------------------------------- - // Texture conversion, resizing, mipmap generation, and block compression - - enum TEX_FR_FLAGS - { - TEX_FR_ROTATE0 = 0x0, - TEX_FR_ROTATE90 = 0x1, - TEX_FR_ROTATE180 = 0x2, - TEX_FR_ROTATE270 = 0x3, - TEX_FR_FLIP_HORIZONTAL = 0x08, - TEX_FR_FLIP_VERTICAL = 0x10, - }; - - HRESULT __cdecl FlipRotate(_In_ const Image& srcImage, _In_ DWORD flags, _Out_ ScratchImage& image); - HRESULT __cdecl FlipRotate( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DWORD flags, _Out_ ScratchImage& result); - // Flip and/or rotate image - - enum TEX_FILTER_FLAGS - { - TEX_FILTER_DEFAULT = 0, - - TEX_FILTER_WRAP_U = 0x1, - TEX_FILTER_WRAP_V = 0x2, - TEX_FILTER_WRAP_W = 0x4, - TEX_FILTER_WRAP = (TEX_FILTER_WRAP_U | TEX_FILTER_WRAP_V | TEX_FILTER_WRAP_W), - TEX_FILTER_MIRROR_U = 0x10, - TEX_FILTER_MIRROR_V = 0x20, - TEX_FILTER_MIRROR_W = 0x40, - TEX_FILTER_MIRROR = (TEX_FILTER_MIRROR_U | TEX_FILTER_MIRROR_V | TEX_FILTER_MIRROR_W), - // Wrap vs. Mirror vs. Clamp filtering options - - TEX_FILTER_SEPARATE_ALPHA = 0x100, - // Resize color and alpha channel independently - - TEX_FILTER_FLOAT_X2BIAS = 0x200, - // Enable *2 - 1 conversion cases for unorm<->float and positive-only float formats - - TEX_FILTER_RGB_COPY_RED = 0x1000, - TEX_FILTER_RGB_COPY_GREEN = 0x2000, - TEX_FILTER_RGB_COPY_BLUE = 0x4000, - // When converting RGB to R, defaults to using grayscale. These flags indicate copying a specific channel instead - // When converting RGB to RG, defaults to copying RED | GREEN. These flags control which channels are selected instead. - - TEX_FILTER_DITHER = 0x10000, - // Use ordered 4x4 dithering for any required conversions - TEX_FILTER_DITHER_DIFFUSION = 0x20000, - // Use error-diffusion dithering for any required conversions - - TEX_FILTER_POINT = 0x100000, - TEX_FILTER_LINEAR = 0x200000, - TEX_FILTER_CUBIC = 0x300000, - TEX_FILTER_BOX = 0x400000, - TEX_FILTER_FANT = 0x400000, // Equiv to Box filtering for mipmap generation - TEX_FILTER_TRIANGLE = 0x500000, - // Filtering mode to use for any required image resizing - - TEX_FILTER_SRGB_IN = 0x1000000, - TEX_FILTER_SRGB_OUT = 0x2000000, - TEX_FILTER_SRGB = (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT), - // sRGB <-> RGB for use in conversion operations - // if the input format type is IsSRGB(), then SRGB_IN is on by default - // if the output format type is IsSRGB(), then SRGB_OUT is on by default - - TEX_FILTER_FORCE_NON_WIC = 0x10000000, - // Forces use of the non-WIC path when both are an option - - TEX_FILTER_FORCE_WIC = 0x20000000, - // Forces use of the WIC path even when logic would have picked a non-WIC path when both are an option - }; - - HRESULT __cdecl Resize( - _In_ const Image& srcImage, _In_ size_t width, _In_ size_t height, - _In_ DWORD filter, - _Out_ ScratchImage& image); - HRESULT __cdecl Resize( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ size_t width, _In_ size_t height, _In_ DWORD filter, _Out_ ScratchImage& result); - // Resize the image to width x height. Defaults to Fant filtering. - // Note for a complex resize, the result will always have mipLevels == 1 - - const float TEX_THRESHOLD_DEFAULT = 0.5f; - // Default value for alpha threshold used when converting to 1-bit alpha - - HRESULT __cdecl Convert( - _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ DWORD filter, _In_ float threshold, - _Out_ ScratchImage& image); - HRESULT __cdecl Convert( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DXGI_FORMAT format, _In_ DWORD filter, _In_ float threshold, _Out_ ScratchImage& result); - // Convert the image to a new format - - HRESULT __cdecl ConvertToSinglePlane(_In_ const Image& srcImage, _Out_ ScratchImage& image); - HRESULT __cdecl ConvertToSinglePlane( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _Out_ ScratchImage& image); - // Converts the image from a planar format to an equivalent non-planar format - - HRESULT __cdecl GenerateMipMaps( - _In_ const Image& baseImage, _In_ DWORD filter, _In_ size_t levels, - _Inout_ ScratchImage& mipChain, _In_ bool allow1D = false); - HRESULT __cdecl GenerateMipMaps( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DWORD filter, _In_ size_t levels, _Inout_ ScratchImage& mipChain); - // levels of '0' indicates a full mipchain, otherwise is generates that number of total levels (including the source base image) - // Defaults to Fant filtering which is equivalent to a box filter - - HRESULT __cdecl GenerateMipMaps3D( - _In_reads_(depth) const Image* baseImages, _In_ size_t depth, _In_ DWORD filter, _In_ size_t levels, - _Out_ ScratchImage& mipChain); - HRESULT __cdecl GenerateMipMaps3D( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DWORD filter, _In_ size_t levels, _Out_ ScratchImage& mipChain); - // levels of '0' indicates a full mipchain, otherwise is generates that number of total levels (including the source base image) - // Defaults to Fant filtering which is equivalent to a box filter - - HRESULT __cdecl ScaleMipMapsAlphaForCoverage( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, _In_ size_t item, - _In_ float alphaReference, _Inout_ ScratchImage& mipChain); - - - enum TEX_PMALPHA_FLAGS - { - TEX_PMALPHA_DEFAULT = 0, - - TEX_PMALPHA_IGNORE_SRGB = 0x1, - // ignores sRGB colorspace conversions - - TEX_PMALPHA_REVERSE = 0x2, - // converts from premultiplied alpha back to straight alpha - - TEX_PMALPHA_SRGB_IN = 0x1000000, - TEX_PMALPHA_SRGB_OUT = 0x2000000, - TEX_PMALPHA_SRGB = (TEX_PMALPHA_SRGB_IN | TEX_PMALPHA_SRGB_OUT), - // if the input format type is IsSRGB(), then SRGB_IN is on by default - // if the output format type is IsSRGB(), then SRGB_OUT is on by default - }; - - HRESULT __cdecl PremultiplyAlpha(_In_ const Image& srcImage, _In_ DWORD flags, _Out_ ScratchImage& image); - HRESULT __cdecl PremultiplyAlpha( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DWORD flags, _Out_ ScratchImage& result); - // Converts to/from a premultiplied alpha version of the texture - - enum TEX_COMPRESS_FLAGS - { - TEX_COMPRESS_DEFAULT = 0, - - TEX_COMPRESS_RGB_DITHER = 0x10000, - // Enables dithering RGB colors for BC1-3 compression - - TEX_COMPRESS_A_DITHER = 0x20000, - // Enables dithering alpha for BC1-3 compression - - TEX_COMPRESS_DITHER = 0x30000, - // Enables both RGB and alpha dithering for BC1-3 compression - - TEX_COMPRESS_UNIFORM = 0x40000, - // Uniform color weighting for BC1-3 compression; by default uses perceptual weighting - - TEX_COMPRESS_BC7_USE_3SUBSETS = 0x80000, - // Enables exhaustive search for BC7 compress for mode 0 and 2; by default skips trying these modes - - TEX_COMPRESS_BC7_QUICK = 0x100000, - // Minimal modes (usually mode 6) for BC7 compression - - TEX_COMPRESS_SRGB_IN = 0x1000000, - TEX_COMPRESS_SRGB_OUT = 0x2000000, - TEX_COMPRESS_SRGB = (TEX_COMPRESS_SRGB_IN | TEX_COMPRESS_SRGB_OUT), - // if the input format type is IsSRGB(), then SRGB_IN is on by default - // if the output format type is IsSRGB(), then SRGB_OUT is on by default - - TEX_COMPRESS_PARALLEL = 0x10000000, - // Compress is free to use multithreading to improve performance (by default it does not use multithreading) - }; - - HRESULT __cdecl Compress( - _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ DWORD compress, _In_ float threshold, - _Out_ ScratchImage& cImage); - HRESULT __cdecl Compress( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DXGI_FORMAT format, _In_ DWORD compress, _In_ float threshold, _Out_ ScratchImage& cImages); - // Note that threshold is only used by BC1. TEX_THRESHOLD_DEFAULT is a typical value to use - -#if defined(__d3d11_h__) || defined(__d3d11_x_h__) - HRESULT __cdecl Compress( - _In_ ID3D11Device* pDevice, _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ DWORD compress, - _In_ float alphaWeight, _Out_ ScratchImage& image); - HRESULT __cdecl Compress( - _In_ ID3D11Device* pDevice, _In_ const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DXGI_FORMAT format, _In_ DWORD compress, _In_ float alphaWeight, _Out_ ScratchImage& cImages); - // DirectCompute-based compression (alphaWeight is only used by BC7. 1.0 is the typical value to use) -#endif - - HRESULT __cdecl Decompress(_In_ const Image& cImage, _In_ DXGI_FORMAT format, _Out_ ScratchImage& image); - HRESULT __cdecl Decompress( - _In_reads_(nimages) const Image* cImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DXGI_FORMAT format, _Out_ ScratchImage& images); - - //--------------------------------------------------------------------------------- - // Normal map operations - - enum CNMAP_FLAGS - { - CNMAP_DEFAULT = 0, - - CNMAP_CHANNEL_RED = 0x1, - CNMAP_CHANNEL_GREEN = 0x2, - CNMAP_CHANNEL_BLUE = 0x3, - CNMAP_CHANNEL_ALPHA = 0x4, - CNMAP_CHANNEL_LUMINANCE = 0x5, - // Channel selection when evaluting color value for height - // Luminance is a combination of red, green, and blue - - CNMAP_MIRROR_U = 0x1000, - CNMAP_MIRROR_V = 0x2000, - CNMAP_MIRROR = 0x3000, - // Use mirror semantics for scanline references (defaults to wrap) - - CNMAP_INVERT_SIGN = 0x4000, - // Inverts normal sign - - CNMAP_COMPUTE_OCCLUSION = 0x8000, - // Computes a crude occlusion term stored in the alpha channel - }; - - HRESULT __cdecl ComputeNormalMap( - _In_ const Image& srcImage, _In_ DWORD flags, _In_ float amplitude, - _In_ DXGI_FORMAT format, _Out_ ScratchImage& normalMap); - HRESULT __cdecl ComputeNormalMap( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ DWORD flags, _In_ float amplitude, _In_ DXGI_FORMAT format, _Out_ ScratchImage& normalMaps); - - //--------------------------------------------------------------------------------- - // Misc image operations - - struct Rect - { - size_t x; - size_t y; - size_t w; - size_t h; - - Rect() = default; - Rect(size_t _x, size_t _y, size_t _w, size_t _h) : x(_x), y(_y), w(_w), h(_h) {} - }; - - HRESULT __cdecl CopyRectangle( - _In_ const Image& srcImage, _In_ const Rect& srcRect, _In_ const Image& dstImage, - _In_ DWORD filter, _In_ size_t xOffset, _In_ size_t yOffset); - - enum CMSE_FLAGS - { - CMSE_DEFAULT = 0, - - CMSE_IMAGE1_SRGB = 0x1, - CMSE_IMAGE2_SRGB = 0x2, - // Indicates that image needs gamma correction before comparision - - CMSE_IGNORE_RED = 0x10, - CMSE_IGNORE_GREEN = 0x20, - CMSE_IGNORE_BLUE = 0x40, - CMSE_IGNORE_ALPHA = 0x80, - // Ignore the channel when computing MSE - - CMSE_IMAGE1_X2_BIAS = 0x100, - CMSE_IMAGE2_X2_BIAS = 0x200, - // Indicates that image should be scaled and biased before comparison (i.e. UNORM -> SNORM) - }; - - HRESULT __cdecl ComputeMSE(_In_ const Image& image1, _In_ const Image& image2, _Out_ float& mse, _Out_writes_opt_(4) float* mseV, _In_ DWORD flags = 0); - - HRESULT __cdecl EvaluateImage( - _In_ const Image& image, - _In_ std::function pixelFunc); - HRESULT __cdecl EvaluateImage( - _In_reads_(nimages) const Image* images, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ std::function pixelFunc); - - HRESULT __cdecl TransformImage( - _In_ const Image& image, - _In_ std::function pixelFunc, - ScratchImage& result); - HRESULT __cdecl TransformImage( - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ std::function pixelFunc, - ScratchImage& result); - - //--------------------------------------------------------------------------------- - // WIC utility code - - enum WICCodecs - { - WIC_CODEC_BMP = 1, // Windows Bitmap (.bmp) - WIC_CODEC_JPEG, // Joint Photographic Experts Group (.jpg, .jpeg) - WIC_CODEC_PNG, // Portable Network Graphics (.png) - WIC_CODEC_TIFF, // Tagged Image File Format (.tif, .tiff) - WIC_CODEC_GIF, // Graphics Interchange Format (.gif) - WIC_CODEC_WMP, // Windows Media Photo / HD Photo / JPEG XR (.hdp, .jxr, .wdp) - WIC_CODEC_ICO, // Windows Icon (.ico) - }; - - REFGUID __cdecl GetWICCodec(_In_ WICCodecs codec); - - IWICImagingFactory* __cdecl GetWICFactory(bool& iswic2); - void __cdecl SetWICFactory(_In_opt_ IWICImagingFactory* pWIC); - - //--------------------------------------------------------------------------------- - // Direct3D 11 functions -#if defined(__d3d11_h__) || defined(__d3d11_x_h__) - bool __cdecl IsSupportedTexture(_In_ ID3D11Device* pDevice, _In_ const TexMetadata& metadata); - - HRESULT __cdecl CreateTexture( - _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _Outptr_ ID3D11Resource** ppResource); - - HRESULT __cdecl CreateShaderResourceView( - _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _Outptr_ ID3D11ShaderResourceView** ppSRV); - - HRESULT __cdecl CreateTextureEx( - _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ D3D11_USAGE usage, _In_ unsigned int bindFlags, _In_ unsigned int cpuAccessFlags, _In_ unsigned int miscFlags, _In_ bool forceSRGB, - _Outptr_ ID3D11Resource** ppResource); - - HRESULT __cdecl CreateShaderResourceViewEx( - _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - _In_ D3D11_USAGE usage, _In_ unsigned int bindFlags, _In_ unsigned int cpuAccessFlags, _In_ unsigned int miscFlags, _In_ bool forceSRGB, - _Outptr_ ID3D11ShaderResourceView** ppSRV); - - HRESULT __cdecl CaptureTexture(_In_ ID3D11Device* pDevice, _In_ ID3D11DeviceContext* pContext, _In_ ID3D11Resource* pSource, _Out_ ScratchImage& result); -#endif - - //--------------------------------------------------------------------------------- - // Direct3D 12 functions -#if defined(__d3d12_h__) || defined(__d3d12_x_h__) - bool __cdecl IsSupportedTexture(_In_ ID3D12Device* pDevice, _In_ const TexMetadata& metadata); - - HRESULT __cdecl CreateTexture( - _In_ ID3D12Device* pDevice, _In_ const TexMetadata& metadata, - _Outptr_ ID3D12Resource** ppResource); - - HRESULT __cdecl CreateTextureEx( - _In_ ID3D12Device* pDevice, _In_ const TexMetadata& metadata, - _In_ D3D12_RESOURCE_FLAGS resFlags, _In_ bool forceSRGB, - _Outptr_ ID3D12Resource** ppResource); - - HRESULT __cdecl PrepareUpload( - _In_ ID3D12Device* pDevice, - _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, - std::vector& subresources); - - HRESULT __cdecl CaptureTexture( - _In_ ID3D12CommandQueue* pCommandQueue, _In_ ID3D12Resource* pSource, _In_ bool isCubeMap, - _Out_ ScratchImage& result, - _In_ D3D12_RESOURCE_STATES beforeState = D3D12_RESOURCE_STATE_RENDER_TARGET, - _In_ D3D12_RESOURCE_STATES afterState = D3D12_RESOURCE_STATE_RENDER_TARGET); -#endif - -#include "DirectXTex.inl" - -} // namespace diff --git a/src/DirectXTex.inl b/src/DirectXTex.inl deleted file mode 100644 index a45abcd..0000000 --- a/src/DirectXTex.inl +++ /dev/null @@ -1,124 +0,0 @@ -//------------------------------------------------------------------------------------- -// DirectXTex.inl -// -// DirectX Texture Library -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// http://go.microsoft.com/fwlink/?LinkId=248926 -//------------------------------------------------------------------------------------- - -#pragma once - -//===================================================================================== -// DXGI Format Utilities -//===================================================================================== - -_Use_decl_annotations_ -inline bool __cdecl IsValid(DXGI_FORMAT fmt) -{ - return (static_cast(fmt) >= 1 && static_cast(fmt) <= 190); -} - -_Use_decl_annotations_ -inline bool __cdecl IsCompressed(DXGI_FORMAT fmt) -{ - switch (fmt) - { - case DXGI_FORMAT_BC1_TYPELESS: - case DXGI_FORMAT_BC1_UNORM: - case DXGI_FORMAT_BC1_UNORM_SRGB: - case DXGI_FORMAT_BC2_TYPELESS: - case DXGI_FORMAT_BC2_UNORM: - case DXGI_FORMAT_BC2_UNORM_SRGB: - case DXGI_FORMAT_BC3_TYPELESS: - case DXGI_FORMAT_BC3_UNORM: - case DXGI_FORMAT_BC3_UNORM_SRGB: - case DXGI_FORMAT_BC4_TYPELESS: - case DXGI_FORMAT_BC4_UNORM: - case DXGI_FORMAT_BC4_SNORM: - case DXGI_FORMAT_BC5_TYPELESS: - case DXGI_FORMAT_BC5_UNORM: - case DXGI_FORMAT_BC5_SNORM: - case DXGI_FORMAT_BC6H_TYPELESS: - case DXGI_FORMAT_BC6H_UF16: - case DXGI_FORMAT_BC6H_SF16: - case DXGI_FORMAT_BC7_TYPELESS: - case DXGI_FORMAT_BC7_UNORM: - case DXGI_FORMAT_BC7_UNORM_SRGB: - return true; - - default: - return false; - } -} - -_Use_decl_annotations_ -inline bool __cdecl IsPalettized(DXGI_FORMAT fmt) -{ - switch (fmt) - { - case DXGI_FORMAT_AI44: - case DXGI_FORMAT_IA44: - case DXGI_FORMAT_P8: - case DXGI_FORMAT_A8P8: - return true; - - default: - return false; - } -} - -_Use_decl_annotations_ -inline bool __cdecl IsSRGB(DXGI_FORMAT fmt) -{ - switch (fmt) - { - case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: - case DXGI_FORMAT_BC1_UNORM_SRGB: - case DXGI_FORMAT_BC2_UNORM_SRGB: - case DXGI_FORMAT_BC3_UNORM_SRGB: - case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: - case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: - case DXGI_FORMAT_BC7_UNORM_SRGB: - return true; - - default: - return false; - } -} - - -//===================================================================================== -// Image I/O -//===================================================================================== -_Use_decl_annotations_ -inline HRESULT __cdecl SaveToDDSMemory(const Image& image, DWORD flags, Blob& blob) -{ - TexMetadata mdata = {}; - mdata.width = image.width; - mdata.height = image.height; - mdata.depth = 1; - mdata.arraySize = 1; - mdata.mipLevels = 1; - mdata.format = image.format; - mdata.dimension = TEX_DIMENSION_TEXTURE2D; - - return SaveToDDSMemory(&image, 1, mdata, flags, blob); -} - -_Use_decl_annotations_ -inline HRESULT __cdecl SaveToDDSFile(const Image& image, DWORD flags, const wchar_t* szFile) -{ - TexMetadata mdata = {}; - mdata.width = image.width; - mdata.height = image.height; - mdata.depth = 1; - mdata.arraySize = 1; - mdata.mipLevels = 1; - mdata.format = image.format; - mdata.dimension = TEX_DIMENSION_TEXTURE2D; - - return SaveToDDSFile(&image, 1, mdata, flags, szFile); -} diff --git a/src/bsa_packer_en.ts b/src/bsa_packer_en.ts index 68552c7..7e13ff7 100644 --- a/src/bsa_packer_en.ts +++ b/src/bsa_packer_en.ts @@ -4,13 +4,13 @@ BsaPacker::Bsa_Packer - - + + Transform loose files into a Bethesda Softworks Archive file (.bsa/.ba2). - + BSA Packer @@ -18,22 +18,22 @@ QObject - + Created - + Archive name (no file extension): - + File " - + " already exists. Overwrite? @@ -53,20 +53,25 @@ - + After creating the archive, set loose assets to hidden. - + Create a dummy plugin to load the archive if one does not exist. - + Specify a semi-colon seperated list of file extensions to ignore when packing. + + + Compress archives if they do not contain incompressible files. + + Writing Archive diff --git a/src/qlibbsarch/DDS.h b/src/qlibbsarch/DDS.h deleted file mode 100644 index d7fff4d..0000000 --- a/src/qlibbsarch/DDS.h +++ /dev/null @@ -1,244 +0,0 @@ -//-------------------------------------------------------------------------------------- -// dds.h -// -// This header defines constants and structures that are useful when parsing -// DDS files. DDS files were originally designed to use several structures -// and constants that are native to DirectDraw and are defined in ddraw.h, -// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar -// (compatible) constants and structures so that one can use DDS files -// without needing to include ddraw.h. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// http://go.microsoft.com/fwlink/?LinkId=248926 -// http://go.microsoft.com/fwlink/?LinkId=248929 -// http://go.microsoft.com/fwlink/?LinkID=615561 -//-------------------------------------------------------------------------------------- - -#pragma once - -#include -#include - - -namespace DirectX -{ - -#pragma pack(push,1) - -const uint32_t DDS_MAGIC = 0x20534444; // "DDS " - -struct DDS_PIXELFORMAT -{ - uint32_t size; - uint32_t flags; - uint32_t fourCC; - uint32_t RGBBitCount; - uint32_t RBitMask; - uint32_t GBitMask; - uint32_t BBitMask; - uint32_t ABitMask; -}; - -#define DDS_FOURCC 0x00000004 // DDPF_FOURCC -#define DDS_RGB 0x00000040 // DDPF_RGB -#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS -#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE -#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS -#define DDS_ALPHAPIXELS 0x00000001 // DDPF_ALPHAPIXELS -#define DDS_ALPHA 0x00000002 // DDPF_ALPHA -#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 -#define DDS_PAL8A 0x00000021 // DDPF_PALETTEINDEXED8 | DDPF_ALPHAPIXELS -#define DDS_BUMPDUDV 0x00080000 // DDPF_BUMPDUDV - -#ifndef MAKEFOURCC - #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ - (static_cast(static_cast(ch0)) \ - | (static_cast(static_cast(ch1)) << 8) \ - | (static_cast(static_cast(ch2)) << 16) \ - | (static_cast(static_cast(ch3)) << 24)) -#endif /* defined(MAKEFOURCC) */ - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = - { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = - { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = - { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = - { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = - { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = - { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = - { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = - { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = - { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = - { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = - { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = - { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8_ALT = - { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 8, 0x00ff, 0x0000, 0x0000, 0xff00 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = - { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_V8U8 = - { sizeof(DDS_PIXELFORMAT), DDS_BUMPDUDV, 0, 16, 0x00ff, 0xff00, 0x0000, 0x0000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_Q8W8V8U8 = - { sizeof(DDS_PIXELFORMAT), DDS_BUMPDUDV, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; - -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_V16U16 = - { sizeof(DDS_PIXELFORMAT), DDS_BUMPDUDV, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; - -// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue - -// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) -extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = - { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; - -#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT -#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT -#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH -#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH -#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE - -#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT -#define DDS_WIDTH 0x00000004 // DDSD_WIDTH - -#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE -#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP -#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX - -#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX -#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX -#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY -#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY -#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ -#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ - -#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ - DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ - DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) - -#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP - -#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME - -// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION -enum DDS_RESOURCE_DIMENSION -{ - DDS_DIMENSION_TEXTURE1D = 2, - DDS_DIMENSION_TEXTURE2D = 3, - DDS_DIMENSION_TEXTURE3D = 4, -}; - -// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG -enum DDS_RESOURCE_MISC_FLAG -{ - DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, -}; - -enum DDS_MISC_FLAGS2 -{ - DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, -}; - -enum DDS_ALPHA_MODE -{ - 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 -{ - uint32_t size; - uint32_t flags; - uint32_t height; - uint32_t width; - uint32_t pitchOrLinearSize; - uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags - uint32_t mipMapCount; - uint32_t reserved1[11]; - DDS_PIXELFORMAT ddspf; - uint32_t caps; - uint32_t caps2; - uint32_t caps3; - uint32_t caps4; - uint32_t reserved2; -}; - -struct DDS_HEADER_DXT10 -{ - DXGI_FORMAT dxgiFormat; - uint32_t resourceDimension; - uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG - uint32_t arraySize; - uint32_t miscFlags2; // see DDS_MISC_FLAGS2 -}; - -#pragma pack(pop) - -static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); -static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); - -} // namespace