#pragma once
#include <ppltasks.h>
namespace DX
{
inline void ThrowIfFailed(HRESULT hr)
{
if (FAILED(hr))
{
winrt::throw_hresult(hr);
}
}
inline Concurrency::task<std::vector<uint8_t>> ReadDataAsync(const std::wstring& filename)
{
using namespace Concurrency;
auto folder = winrt::Windows::ApplicationModel::Package::Current().InstalledLocation();
return create_task([folder, filename]() -> std::vector<uint8_t> {
auto file = folder.GetFileAsync(winrt::hstring(filename)).get();
auto buffer = winrt::Windows::Storage::FileIO::ReadBufferAsync(file).get();
std::vector<uint8_t> returnBuffer(buffer.Length());
auto reader = winrt::Windows::Storage::Streams::DataReader::FromBuffer(buffer);
reader.ReadBytes(returnBuffer);
return returnBuffer;
});
}
inline float ConvertDipsToPixels(float dips, float dpi)
{
static const float dipsPerInch = 96.0f;
return floorf(dips * dpi / dipsPerInch + 0.5f);
}
#if defined(_DEBUG)
inline bool SdkLayersAvailable()
{
HRESULT hr = D3D11CreateDevice(
nullptr,
D3D_DRIVER_TYPE_NULL,
0,
D3D11_CREATE_DEVICE_DEBUG,
nullptr,
0,
D3D11_SDK_VERSION,
nullptr,
nullptr,
nullptr
);
return SUCCEEDED(hr);
}
#endif
}