Blame view

3rdparty/opencv-4.5.4/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h 1.38 KB
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  #pragma once
  
  #include <wrl/client.h>
  #include <ppl.h>
  #include <ppltasks.h>
  
  namespace DX
  {
      inline void ThrowIfFailed(HRESULT hr)
      {
          if (FAILED(hr))
          {
              // Set a breakpoint on this line to catch Win32 API errors.
              throw Platform::Exception::CreateException(hr);
          }
      }
  
      // Function that reads from a binary file asynchronously.
      inline Concurrency::task<Platform::Array<byte>^> ReadDataAsync(Platform::String^ filename)
      {
          using namespace Windows::Storage;
          using namespace Concurrency;
  
          auto folder = Windows::ApplicationModel::Package::Current->InstalledLocation;
  
          return create_task(folder->GetFileAsync(filename)).then([] (StorageFile^ file)
          {
              return file->OpenReadAsync();
          }).then([] (Streams::IRandomAccessStreamWithContentType^ stream)
          {
              unsigned int bufferSize = static_cast<unsigned int>(stream->Size);
              auto fileBuffer = ref new Streams::Buffer(bufferSize);
              return stream->ReadAsync(fileBuffer, bufferSize, Streams::InputStreamOptions::None);
          }).then([] (Streams::IBuffer^ fileBuffer) -> Platform::Array<byte>^
          {
              auto fileData = ref new Platform::Array<byte>(fileBuffer->Length);
              Streams::DataReader::FromBuffer(fileBuffer)->ReadBytes(fileData);
              return fileData;
          });
      }
  }