mirror of
https://github.com/microsoft/DirectXTex.git
synced 2026-02-04 04:16:12 +01:00
Code refactor and reformat for texture loaders (#137)
This commit is contained in:
@@ -677,24 +677,85 @@ namespace
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
void SetDebugTextureInfo(
|
||||
_In_z_ const wchar_t* fileName,
|
||||
_In_opt_ ID3D11Resource** texture,
|
||||
_In_opt_ ID3D11ShaderResourceView** textureView)
|
||||
{
|
||||
#if !defined(NO_D3D11_DEBUG_NAME) && ( defined(_DEBUG) || defined(PROFILE) )
|
||||
if (texture || textureView)
|
||||
{
|
||||
CHAR strFileA[MAX_PATH];
|
||||
int result = WideCharToMultiByte(CP_UTF8,
|
||||
WC_NO_BEST_FIT_CHARS,
|
||||
fileName,
|
||||
-1,
|
||||
strFileA,
|
||||
MAX_PATH,
|
||||
nullptr,
|
||||
nullptr
|
||||
);
|
||||
if (result > 0)
|
||||
{
|
||||
const char* pstrName = strrchr(strFileA, '\\');
|
||||
if (!pstrName)
|
||||
{
|
||||
pstrName = strFileA;
|
||||
}
|
||||
else
|
||||
{
|
||||
pstrName++;
|
||||
}
|
||||
|
||||
if (texture && *texture)
|
||||
{
|
||||
(*texture)->SetPrivateData(WKPDID_D3DDebugObjectName,
|
||||
static_cast<UINT>(strnlen_s(pstrName, MAX_PATH)),
|
||||
pstrName
|
||||
);
|
||||
}
|
||||
|
||||
if (textureView && *textureView)
|
||||
{
|
||||
(*textureView)->SetPrivateData(WKPDID_D3DDebugObjectName,
|
||||
static_cast<UINT>(strnlen_s(pstrName, MAX_PATH)),
|
||||
pstrName
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
UNREFERENCED_PARAMETER(fileName);
|
||||
UNREFERENCED_PARAMETER(texture);
|
||||
UNREFERENCED_PARAMETER(textureView);
|
||||
#endif
|
||||
}
|
||||
} // anonymous namespace
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
_Use_decl_annotations_
|
||||
HRESULT DirectX::CreateWICTextureFromMemory(ID3D11Device* d3dDevice,
|
||||
HRESULT DirectX::CreateWICTextureFromMemory(
|
||||
ID3D11Device* d3dDevice,
|
||||
const uint8_t* wicData,
|
||||
size_t wicDataSize,
|
||||
ID3D11Resource** texture,
|
||||
ID3D11ShaderResourceView** textureView,
|
||||
size_t maxsize)
|
||||
{
|
||||
return CreateWICTextureFromMemoryEx(d3dDevice, nullptr, wicData, wicDataSize, maxsize,
|
||||
D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0, WIC_LOADER_DEFAULT,
|
||||
return CreateWICTextureFromMemoryEx(d3dDevice, nullptr,
|
||||
wicData, wicDataSize,
|
||||
maxsize,
|
||||
D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0,
|
||||
WIC_LOADER_DEFAULT,
|
||||
texture, textureView);
|
||||
}
|
||||
|
||||
_Use_decl_annotations_
|
||||
HRESULT DirectX::CreateWICTextureFromMemory(ID3D11Device* d3dDevice,
|
||||
HRESULT DirectX::CreateWICTextureFromMemory(
|
||||
ID3D11Device* d3dDevice,
|
||||
ID3D11DeviceContext* d3dContext,
|
||||
const uint8_t* wicData,
|
||||
size_t wicDataSize,
|
||||
@@ -702,13 +763,17 @@ HRESULT DirectX::CreateWICTextureFromMemory(ID3D11Device* d3dDevice,
|
||||
ID3D11ShaderResourceView** textureView,
|
||||
size_t maxsize)
|
||||
{
|
||||
return CreateWICTextureFromMemoryEx(d3dDevice, d3dContext, wicData, wicDataSize, maxsize,
|
||||
D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0, WIC_LOADER_DEFAULT,
|
||||
return CreateWICTextureFromMemoryEx(d3dDevice, d3dContext,
|
||||
wicData, wicDataSize,
|
||||
maxsize,
|
||||
D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0,
|
||||
WIC_LOADER_DEFAULT,
|
||||
texture, textureView);
|
||||
}
|
||||
|
||||
_Use_decl_annotations_
|
||||
HRESULT DirectX::CreateWICTextureFromMemoryEx(ID3D11Device* d3dDevice,
|
||||
HRESULT DirectX::CreateWICTextureFromMemoryEx(
|
||||
ID3D11Device* d3dDevice,
|
||||
const uint8_t* wicData,
|
||||
size_t wicDataSize,
|
||||
size_t maxsize,
|
||||
@@ -720,13 +785,17 @@ HRESULT DirectX::CreateWICTextureFromMemoryEx(ID3D11Device* d3dDevice,
|
||||
ID3D11Resource** texture,
|
||||
ID3D11ShaderResourceView** textureView)
|
||||
{
|
||||
return CreateWICTextureFromMemoryEx(d3dDevice, nullptr, wicData, wicDataSize, maxsize,
|
||||
usage, bindFlags, cpuAccessFlags, miscFlags, loadFlags,
|
||||
return CreateWICTextureFromMemoryEx(d3dDevice, nullptr,
|
||||
wicData, wicDataSize,
|
||||
maxsize,
|
||||
usage, bindFlags, cpuAccessFlags, miscFlags,
|
||||
loadFlags,
|
||||
texture, textureView);
|
||||
}
|
||||
|
||||
_Use_decl_annotations_
|
||||
HRESULT DirectX::CreateWICTextureFromMemoryEx(ID3D11Device* d3dDevice,
|
||||
HRESULT DirectX::CreateWICTextureFromMemoryEx(
|
||||
ID3D11Device* d3dDevice,
|
||||
ID3D11DeviceContext* d3dContext,
|
||||
const uint8_t* wicData,
|
||||
size_t wicDataSize,
|
||||
@@ -782,8 +851,11 @@ HRESULT DirectX::CreateWICTextureFromMemoryEx(ID3D11Device* d3dDevice,
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = CreateTextureFromWIC(d3dDevice, d3dContext, frame.Get(), maxsize,
|
||||
usage, bindFlags, cpuAccessFlags, miscFlags, loadFlags,
|
||||
hr = CreateTextureFromWIC(d3dDevice, d3dContext,
|
||||
frame.Get(),
|
||||
maxsize,
|
||||
usage, bindFlags, cpuAccessFlags, miscFlags,
|
||||
loadFlags,
|
||||
texture, textureView);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
@@ -803,32 +875,40 @@ HRESULT DirectX::CreateWICTextureFromMemoryEx(ID3D11Device* d3dDevice,
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
_Use_decl_annotations_
|
||||
HRESULT DirectX::CreateWICTextureFromFile(ID3D11Device* d3dDevice,
|
||||
HRESULT DirectX::CreateWICTextureFromFile(
|
||||
ID3D11Device* d3dDevice,
|
||||
const wchar_t* fileName,
|
||||
ID3D11Resource** texture,
|
||||
ID3D11ShaderResourceView** textureView,
|
||||
size_t maxsize)
|
||||
{
|
||||
return CreateWICTextureFromFileEx(d3dDevice, nullptr, fileName, maxsize,
|
||||
D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0, WIC_LOADER_DEFAULT,
|
||||
return CreateWICTextureFromFileEx(d3dDevice, nullptr,
|
||||
fileName, maxsize,
|
||||
D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0,
|
||||
WIC_LOADER_DEFAULT,
|
||||
texture, textureView);
|
||||
}
|
||||
|
||||
_Use_decl_annotations_
|
||||
HRESULT DirectX::CreateWICTextureFromFile(ID3D11Device* d3dDevice,
|
||||
HRESULT DirectX::CreateWICTextureFromFile(
|
||||
ID3D11Device* d3dDevice,
|
||||
ID3D11DeviceContext* d3dContext,
|
||||
const wchar_t* fileName,
|
||||
ID3D11Resource** texture,
|
||||
ID3D11ShaderResourceView** textureView,
|
||||
size_t maxsize)
|
||||
{
|
||||
return CreateWICTextureFromFileEx(d3dDevice, d3dContext, fileName, maxsize,
|
||||
D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0, WIC_LOADER_DEFAULT,
|
||||
return CreateWICTextureFromFileEx(d3dDevice, d3dContext,
|
||||
fileName,
|
||||
maxsize,
|
||||
D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0,
|
||||
WIC_LOADER_DEFAULT,
|
||||
texture, textureView);
|
||||
}
|
||||
|
||||
_Use_decl_annotations_
|
||||
HRESULT DirectX::CreateWICTextureFromFileEx(ID3D11Device* d3dDevice,
|
||||
HRESULT DirectX::CreateWICTextureFromFileEx(
|
||||
ID3D11Device* d3dDevice,
|
||||
const wchar_t* fileName,
|
||||
size_t maxsize,
|
||||
D3D11_USAGE usage,
|
||||
@@ -839,13 +919,17 @@ HRESULT DirectX::CreateWICTextureFromFileEx(ID3D11Device* d3dDevice,
|
||||
ID3D11Resource** texture,
|
||||
ID3D11ShaderResourceView** textureView)
|
||||
{
|
||||
return CreateWICTextureFromFileEx(d3dDevice, nullptr, fileName, maxsize,
|
||||
usage, bindFlags, cpuAccessFlags, miscFlags, loadFlags,
|
||||
return CreateWICTextureFromFileEx(d3dDevice, nullptr,
|
||||
fileName,
|
||||
maxsize,
|
||||
usage, bindFlags, cpuAccessFlags, miscFlags,
|
||||
loadFlags,
|
||||
texture, textureView);
|
||||
}
|
||||
|
||||
_Use_decl_annotations_
|
||||
HRESULT DirectX::CreateWICTextureFromFileEx(ID3D11Device* d3dDevice,
|
||||
HRESULT DirectX::CreateWICTextureFromFileEx(
|
||||
ID3D11Device* d3dDevice,
|
||||
ID3D11DeviceContext* d3dContext,
|
||||
const wchar_t* fileName,
|
||||
size_t maxsize,
|
||||
@@ -875,7 +959,11 @@ HRESULT DirectX::CreateWICTextureFromFileEx(ID3D11Device* d3dDevice,
|
||||
|
||||
// Initialize WIC
|
||||
ComPtr<IWICBitmapDecoder> decoder;
|
||||
HRESULT hr = pWIC->CreateDecoderFromFilename(fileName, nullptr, GENERIC_READ, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf());
|
||||
HRESULT hr = pWIC->CreateDecoderFromFilename(fileName,
|
||||
nullptr,
|
||||
GENERIC_READ,
|
||||
WICDecodeMetadataCacheOnDemand,
|
||||
decoder.GetAddressOf());
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
@@ -884,56 +972,17 @@ HRESULT DirectX::CreateWICTextureFromFileEx(ID3D11Device* d3dDevice,
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = CreateTextureFromWIC(d3dDevice, d3dContext, frame.Get(), maxsize,
|
||||
usage, bindFlags, cpuAccessFlags, miscFlags, loadFlags,
|
||||
hr = CreateTextureFromWIC(d3dDevice, d3dContext,
|
||||
frame.Get(),
|
||||
maxsize,
|
||||
usage, bindFlags, cpuAccessFlags, miscFlags,
|
||||
loadFlags,
|
||||
texture, textureView);
|
||||
|
||||
#if !defined(NO_D3D11_DEBUG_NAME) && ( defined(_DEBUG) || defined(PROFILE) )
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
if (texture || textureView)
|
||||
{
|
||||
char strFileA[MAX_PATH];
|
||||
int result = WideCharToMultiByte(CP_UTF8,
|
||||
WC_NO_BEST_FIT_CHARS,
|
||||
fileName,
|
||||
-1,
|
||||
strFileA,
|
||||
MAX_PATH,
|
||||
nullptr,
|
||||
FALSE
|
||||
);
|
||||
if (result > 0)
|
||||
{
|
||||
const char* pstrName = strrchr(strFileA, '\\');
|
||||
if (!pstrName)
|
||||
{
|
||||
pstrName = strFileA;
|
||||
}
|
||||
else
|
||||
{
|
||||
pstrName++;
|
||||
}
|
||||
|
||||
if (texture && *texture)
|
||||
{
|
||||
(*texture)->SetPrivateData(WKPDID_D3DDebugObjectName,
|
||||
static_cast<UINT>(strnlen_s(pstrName, MAX_PATH)),
|
||||
pstrName
|
||||
);
|
||||
}
|
||||
|
||||
if (textureView && *textureView)
|
||||
{
|
||||
(*textureView)->SetPrivateData(WKPDID_D3DDebugObjectName,
|
||||
static_cast<UINT>(strnlen_s(pstrName, MAX_PATH)),
|
||||
pstrName
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
SetDebugTextureInfo(fileName, texture, textureView);
|
||||
}
|
||||
#endif
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -529,6 +529,35 @@ namespace
|
||||
*texture = tex;
|
||||
return hr;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
void SetDebugTextureInfo(
|
||||
_In_z_ const wchar_t* fileName,
|
||||
_In_ ID3D12Resource** texture)
|
||||
{
|
||||
#if !defined(NO_D3D12_DEBUG_NAME) && ( defined(_DEBUG) || defined(PROFILE) )
|
||||
if (texture)
|
||||
{
|
||||
const wchar_t* pstrName = wcsrchr(fileName, '\\');
|
||||
if (!pstrName)
|
||||
{
|
||||
pstrName = fileName;
|
||||
}
|
||||
else
|
||||
{
|
||||
pstrName++;
|
||||
}
|
||||
|
||||
if (texture && *texture)
|
||||
{
|
||||
(*texture)->SetName(pstrName);
|
||||
}
|
||||
}
|
||||
#else
|
||||
UNREFERENCED_PARAMETER(fileName);
|
||||
UNREFERENCED_PARAMETER(texture);
|
||||
#endif
|
||||
}
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
@@ -569,50 +598,50 @@ HRESULT DirectX::LoadWICTextureFromMemoryEx(
|
||||
std::unique_ptr<uint8_t[]>& decodedData,
|
||||
D3D12_SUBRESOURCE_DATA& subresource)
|
||||
{
|
||||
if ( texture )
|
||||
if (texture)
|
||||
{
|
||||
*texture = nullptr;
|
||||
}
|
||||
|
||||
if (!d3dDevice || !wicData || !texture)
|
||||
if (!d3dDevice || !wicData || !texture)
|
||||
return E_INVALIDARG;
|
||||
|
||||
if ( !wicDataSize )
|
||||
if (!wicDataSize)
|
||||
return E_FAIL;
|
||||
|
||||
if ( wicDataSize > UINT32_MAX )
|
||||
return HRESULT_FROM_WIN32( ERROR_FILE_TOO_LARGE );
|
||||
if (wicDataSize > UINT32_MAX)
|
||||
return HRESULT_FROM_WIN32(ERROR_FILE_TOO_LARGE);
|
||||
|
||||
auto pWIC = _GetWIC();
|
||||
if ( !pWIC )
|
||||
if (!pWIC)
|
||||
return E_NOINTERFACE;
|
||||
|
||||
// Create input stream for memory
|
||||
ComPtr<IWICStream> stream;
|
||||
HRESULT hr = pWIC->CreateStream( stream.GetAddressOf() );
|
||||
if ( FAILED(hr) )
|
||||
HRESULT hr = pWIC->CreateStream(stream.GetAddressOf());
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = stream->InitializeFromMemory( const_cast<uint8_t*>( wicData ), static_cast<DWORD>( wicDataSize ) );
|
||||
if ( FAILED(hr) )
|
||||
hr = stream->InitializeFromMemory(const_cast<uint8_t*>(wicData), static_cast<DWORD>(wicDataSize));
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
// Initialize WIC
|
||||
ComPtr<IWICBitmapDecoder> decoder;
|
||||
hr = pWIC->CreateDecoderFromStream( stream.Get(), nullptr, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf() );
|
||||
if ( FAILED(hr) )
|
||||
hr = pWIC->CreateDecoderFromStream(stream.Get(), nullptr, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf());
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
ComPtr<IWICBitmapFrameDecode> frame;
|
||||
hr = decoder->GetFrame( 0, frame.GetAddressOf() );
|
||||
if ( FAILED(hr) )
|
||||
hr = decoder->GetFrame(0, frame.GetAddressOf());
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = CreateTextureFromWIC( d3dDevice,
|
||||
frame.Get(), maxsize,
|
||||
resFlags, loadFlags,
|
||||
texture, decodedData, subresource);
|
||||
if ( FAILED(hr))
|
||||
hr = CreateTextureFromWIC(d3dDevice,
|
||||
frame.Get(), maxsize,
|
||||
resFlags, loadFlags,
|
||||
texture, decodedData, subresource);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
_Analysis_assume_(*texture != nullptr);
|
||||
@@ -656,52 +685,37 @@ HRESULT DirectX::LoadWICTextureFromFileEx(
|
||||
std::unique_ptr<uint8_t[]>& decodedData,
|
||||
D3D12_SUBRESOURCE_DATA& subresource)
|
||||
{
|
||||
if ( texture )
|
||||
if (texture)
|
||||
{
|
||||
*texture = nullptr;
|
||||
}
|
||||
|
||||
if (!d3dDevice || !fileName || !texture )
|
||||
if (!d3dDevice || !fileName || !texture)
|
||||
return E_INVALIDARG;
|
||||
|
||||
auto pWIC = _GetWIC();
|
||||
if ( !pWIC )
|
||||
if (!pWIC)
|
||||
return E_NOINTERFACE;
|
||||
|
||||
// Initialize WIC
|
||||
ComPtr<IWICBitmapDecoder> decoder;
|
||||
HRESULT hr = pWIC->CreateDecoderFromFilename( fileName, nullptr, GENERIC_READ, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf() );
|
||||
if ( FAILED(hr) )
|
||||
HRESULT hr = pWIC->CreateDecoderFromFilename(fileName, nullptr, GENERIC_READ, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf());
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
ComPtr<IWICBitmapFrameDecode> frame;
|
||||
hr = decoder->GetFrame( 0, frame.GetAddressOf() );
|
||||
if ( FAILED(hr) )
|
||||
hr = decoder->GetFrame(0, frame.GetAddressOf());
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = CreateTextureFromWIC( d3dDevice, frame.Get(), maxsize,
|
||||
resFlags, loadFlags,
|
||||
texture, decodedData, subresource );
|
||||
hr = CreateTextureFromWIC(d3dDevice, frame.Get(), maxsize,
|
||||
resFlags, loadFlags,
|
||||
texture, decodedData, subresource);
|
||||
|
||||
#if !defined(NO_D3D12_DEBUG_NAME) && ( defined(_DEBUG) || defined(PROFILE) )
|
||||
if ( SUCCEEDED(hr) )
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
const wchar_t* pstrName = wcsrchr(fileName, '\\' );
|
||||
if (!pstrName)
|
||||
{
|
||||
pstrName = fileName;
|
||||
}
|
||||
else
|
||||
{
|
||||
pstrName++;
|
||||
}
|
||||
|
||||
if (texture && *texture)
|
||||
{
|
||||
(*texture)->SetName(pstrName);
|
||||
}
|
||||
SetDebugTextureInfo(fileName, texture);
|
||||
}
|
||||
#endif
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user