Blame view

3rdparty/opencv-4.5.4/cmake/checks/directx.cpp 1.95 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  #include <windows.h>
  
  #include <d3d11.h>
  #pragma comment (lib, "d3d11.lib")
  
  HINSTANCE g_hInst = NULL;
  D3D_DRIVER_TYPE g_driverType = D3D_DRIVER_TYPE_NULL;
  D3D_FEATURE_LEVEL g_featureLevel = D3D_FEATURE_LEVEL_11_0;
  ID3D11Device* g_pd3dDevice = NULL;
  ID3D11DeviceContext* g_pImmediateContext = NULL;
  IDXGISwapChain* g_pSwapChain = NULL;
  
  static HRESULT InitDevice()
  {
      HRESULT hr = S_OK;
  
      UINT width = 640;
      UINT height = 480;
  
      UINT createDeviceFlags = 0;
  
      D3D_DRIVER_TYPE driverTypes[] =
      {
          D3D_DRIVER_TYPE_HARDWARE,
          D3D_DRIVER_TYPE_WARP,
          D3D_DRIVER_TYPE_REFERENCE,
      };
      UINT numDriverTypes = ARRAYSIZE(driverTypes);
  
      D3D_FEATURE_LEVEL featureLevels[] =
      {
          D3D_FEATURE_LEVEL_11_0,
          D3D_FEATURE_LEVEL_10_1,
          D3D_FEATURE_LEVEL_10_0,
      };
      UINT numFeatureLevels = ARRAYSIZE(featureLevels);
  
      DXGI_SWAP_CHAIN_DESC sd;
      ZeroMemory( &sd, sizeof( sd ) );
      sd.BufferCount = 1;
      sd.BufferDesc.Width = width;
      sd.BufferDesc.Height = height;
  #ifdef CHECK_NV12
      sd.BufferDesc.Format = DXGI_FORMAT_NV12;
  #else
      sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
  #endif
      sd.BufferDesc.RefreshRate.Numerator = 60;
      sd.BufferDesc.RefreshRate.Denominator = 1;
      sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
      sd.OutputWindow = NULL; //g_hWnd;
      sd.SampleDesc.Count = 1;
      sd.SampleDesc.Quality = 0;
      sd.Windowed = TRUE;
  
      for (UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++)
      {
          g_driverType = driverTypes[driverTypeIndex];
          hr = D3D11CreateDeviceAndSwapChain(NULL, g_driverType, NULL, createDeviceFlags, featureLevels, numFeatureLevels,
                  D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &g_featureLevel, &g_pImmediateContext);
          if (SUCCEEDED(hr))
              break;
      }
      if (FAILED(hr))
          return hr;
  
      return S_OK;
  }
  
  int main(int /*argc*/, char** /*argv*/)
  {
      InitDevice();
      return 0;
  }