diff --git a/DirectXTex/DirectXTexImage.cpp b/DirectXTex/DirectXTexImage.cpp index 6b9c209..bd44016 100644 --- a/DirectXTex/DirectXTexImage.cpp +++ b/DirectXTex/DirectXTexImage.cpp @@ -270,9 +270,6 @@ HRESULT ScratchImage::Initialize( const TexMetadata& mdata, DWORD flags ) if ( !mdata.width || mdata.height != 1 || mdata.depth != 1 || !mdata.arraySize ) return E_INVALIDARG; - if ( IsVideo(mdata.format) ) - return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); - if ( !_CalculateMipLevels(mdata.width,1,mipLevels) ) return E_INVALIDARG; break; @@ -285,9 +282,6 @@ HRESULT ScratchImage::Initialize( const TexMetadata& mdata, DWORD flags ) { if ( (mdata.arraySize % 6) != 0 ) return E_INVALIDARG; - - if ( IsVideo(mdata.format) ) - return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); } if ( !_CalculateMipLevels(mdata.width,mdata.height,mipLevels) ) @@ -298,9 +292,6 @@ HRESULT ScratchImage::Initialize( const TexMetadata& mdata, DWORD flags ) if ( !mdata.width || !mdata.height || !mdata.depth || mdata.arraySize != 1 ) return E_INVALIDARG; - if ( IsVideo(mdata.format) || IsPlanar(mdata.format) || IsDepthStencil(mdata.format) ) - return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); - if ( !_CalculateMipLevels3D(mdata.width,mdata.height,mdata.depth,mipLevels) ) return E_INVALIDARG; break; @@ -353,9 +344,6 @@ HRESULT ScratchImage::Initialize1D( DXGI_FORMAT fmt, size_t length, size_t array if ( !length || !arraySize ) return E_INVALIDARG; - if ( IsVideo(fmt) ) - return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); - // 1D is a special case of the 2D case HRESULT hr = Initialize2D( fmt, length, 1, arraySize, mipLevels, flags ); if ( FAILED(hr) ) @@ -422,7 +410,7 @@ HRESULT ScratchImage::Initialize3D( DXGI_FORMAT fmt, size_t width, size_t height if ( !IsValid(fmt) || !width || !height || !depth ) return E_INVALIDARG; - if ( IsVideo(fmt) || IsPlanar(fmt) || IsDepthStencil(fmt) ) + if ( IsPalettized(fmt) ) return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); if ( !_CalculateMipLevels3D(width,height,depth,mipLevels) ) @@ -475,9 +463,6 @@ HRESULT ScratchImage::InitializeCube( DXGI_FORMAT fmt, size_t width, size_t heig if ( !width || !height || !nCubes ) return E_INVALIDARG; - if ( IsVideo(fmt) ) - return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); - // A DirectX11 cubemap is just a 2D texture array that is a multiple of 6 for each cube HRESULT hr = Initialize2D( fmt, width, height, nCubes * 6, mipLevels, flags ); if ( FAILED(hr) ) @@ -595,9 +580,6 @@ HRESULT ScratchImage::InitializeCubeFromImages( const Image* images, size_t nIma if ( ( nImages % 6 ) != 0 ) return E_INVALIDARG; - if ( IsVideo(images[0].format) || IsPalettized(images[0].format) ) - return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); - HRESULT hr = InitializeArrayFromImages( images, nImages, false, flags ); if ( FAILED(hr) ) return hr; diff --git a/DirectXTex/DirectXTexMipmaps.cpp b/DirectXTex/DirectXTexMipmaps.cpp index 54c26e9..0df5b8e 100644 --- a/DirectXTex/DirectXTexMipmaps.cpp +++ b/DirectXTex/DirectXTexMipmaps.cpp @@ -2567,6 +2567,12 @@ HRESULT GenerateMipMaps( const Image& baseImage, DWORD filter, size_t levels, Sc return E_POINTER; ScratchImage tMipChain; + hr = (baseImage.height > 1 || !allow1D) + ? tMipChain.Initialize2D( DXGI_FORMAT_R32G32B32A32_FLOAT, baseImage.width, baseImage.height, 1, levels ) + : tMipChain.Initialize1D( DXGI_FORMAT_R32G32B32A32_FLOAT, baseImage.width, 1, levels ); + if ( FAILED(hr) ) + return hr; + hr = _GenerateMipMapsUsingWIC( *timg, filter, levels, GUID_WICPixelFormat128bppRGBAFloat, tMipChain, 0 ); if ( FAILED(hr) ) return hr;