VirtualBox

source: vbox/trunk/src/libs/dxvk-native-1.9.2a/tests/d3d9/test_d3d9_clear.cpp@ 103698

最後變更 在這個檔案從103698是 96497,由 vboxsync 提交於 3 年 前

libs/dxvk-native-1.9.2a: export to OSE

  • 屬性 svn:eol-style 設為 native
檔案大小: 4.0 KB
 
1#include <d3d9.h>
2
3#include "../test_utils.h"
4
5using namespace dxvk;
6
7struct Extent2D {
8 uint32_t w, h;
9};
10
11class ClearApp {
12
13public:
14
15 ClearApp(HINSTANCE instance, HWND window)
16 : m_window(window) {
17 HRESULT status = Direct3DCreate9Ex(D3D_SDK_VERSION, &m_d3d);
18
19 if (FAILED(status))
20 throw DxvkError("Failed to create D3D9 interface");
21
22 D3DPRESENT_PARAMETERS params;
23 getPresentParams(params);
24
25 status = m_d3d->CreateDeviceEx(
26 D3DADAPTER_DEFAULT,
27 D3DDEVTYPE_HAL,
28 m_window,
29 D3DCREATE_HARDWARE_VERTEXPROCESSING,
30 &params,
31 nullptr,
32 &m_device);
33
34 if (FAILED(status))
35 throw DxvkError("Failed to create D3D9 device");
36 }
37
38 void run() {
39 this->adjustBackBuffer();
40
41 m_device->BeginScene();
42
43 m_device->Clear(
44 0,
45 nullptr,
46 D3DCLEAR_TARGET,
47 D3DCOLOR_RGBA(255, 0, 0, 0),
48 0.0f,
49 0);
50
51 m_device->EndScene();
52
53 m_device->PresentEx(
54 nullptr,
55 nullptr,
56 nullptr,
57 nullptr,
58 0);
59 }
60
61 void adjustBackBuffer() {
62 RECT windowRect = { 0, 0, 1024, 600 };
63 GetClientRect(m_window, &windowRect);
64
65 Extent2D newSize = {
66 static_cast<uint32_t>(windowRect.right - windowRect.left),
67 static_cast<uint32_t>(windowRect.bottom - windowRect.top),
68 };
69
70 if (m_windowSize.w != newSize.w
71 || m_windowSize.h != newSize.h) {
72 m_windowSize = newSize;
73
74 D3DPRESENT_PARAMETERS params;
75 getPresentParams(params);
76 HRESULT status = m_device->ResetEx(&params, nullptr);
77
78 if (FAILED(status))
79 throw DxvkError("Device reset failed");
80 }
81 }
82
83 void getPresentParams(D3DPRESENT_PARAMETERS& params) {
84 params.AutoDepthStencilFormat = D3DFMT_UNKNOWN;
85 params.BackBufferCount = 1;
86 params.BackBufferFormat = D3DFMT_X8R8G8B8;
87 params.BackBufferWidth = m_windowSize.w;
88 params.BackBufferHeight = m_windowSize.h;
89 params.EnableAutoDepthStencil = FALSE;
90 params.Flags = 0;
91 params.FullScreen_RefreshRateInHz = 0;
92 params.hDeviceWindow = m_window;
93 params.MultiSampleQuality = 0;
94 params.MultiSampleType = D3DMULTISAMPLE_NONE;
95 params.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
96 params.SwapEffect = D3DSWAPEFFECT_DISCARD;
97 params.Windowed = TRUE;
98 }
99
100private:
101
102 HWND m_window;
103 Extent2D m_windowSize = { 1024, 600 };
104
105 Com<IDirect3D9Ex> m_d3d;
106 Com<IDirect3DDevice9Ex> m_device;
107
108};
109
110LRESULT CALLBACK WindowProc(HWND hWnd,
111 UINT message,
112 WPARAM wParam,
113 LPARAM lParam);
114
115int WINAPI WinMain(HINSTANCE hInstance,
116 HINSTANCE hPrevInstance,
117 LPSTR lpCmdLine,
118 int nCmdShow) {
119 HWND hWnd;
120 WNDCLASSEXW wc;
121 ZeroMemory(&wc, sizeof(WNDCLASSEX));
122 wc.cbSize = sizeof(WNDCLASSEX);
123 wc.style = CS_HREDRAW | CS_VREDRAW;
124 wc.lpfnWndProc = WindowProc;
125 wc.hInstance = hInstance;
126 wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
127 wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
128 wc.lpszClassName = L"WindowClass1";
129 RegisterClassExW(&wc);
130
131 hWnd = CreateWindowExW(0,
132 L"WindowClass1",
133 L"Our First Windowed Program",
134 WS_OVERLAPPEDWINDOW,
135 300, 300,
136 640, 480,
137 nullptr,
138 nullptr,
139 hInstance,
140 nullptr);
141 ShowWindow(hWnd, nCmdShow);
142
143 MSG msg;
144
145 try {
146 ClearApp app(hInstance, hWnd);
147
148 while (true) {
149 if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
150 TranslateMessage(&msg);
151 DispatchMessage(&msg);
152
153 if (msg.message == WM_QUIT)
154 return msg.wParam;
155 } else {
156 app.run();
157 }
158 }
159 } catch (const dxvk::DxvkError& e) {
160 std::cerr << e.message() << std::endl;
161 return msg.wParam;
162 }
163}
164
165LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
166 switch (message) {
167 case WM_CLOSE:
168 PostQuitMessage(0);
169 return 0;
170 }
171
172 return DefWindowProc(hWnd, message, wParam, lParam);
173}
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette