|
@@ -7,7 +7,7 @@ using namespace DirectX;
|
|
|
|
|
|
|
|
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
{
|
|
|
- // 转发窗口消息
|
|
|
|
|
|
|
+ // 杞�彂绐楀彛娑堟伅
|
|
|
return D3DApp::GetApp()->MsgProc(hwnd, msg, wParam, lParam);
|
|
return D3DApp::GetApp()->MsgProc(hwnd, msg, wParam, lParam);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -17,7 +17,7 @@ D3DApp::D3DApp(HINSTANCE hInstance)
|
|
|
{
|
|
{
|
|
|
mhAppInst = hInstance;
|
|
mhAppInst = hInstance;
|
|
|
|
|
|
|
|
- // 单例模式 禁止各种方式创建第二个
|
|
|
|
|
|
|
+ // 鍗曚緥妯″紡 绂佹�鍚勭�鏂瑰紡鍒涘缓绗�簩涓�
|
|
|
assert(mApp == nullptr);
|
|
assert(mApp == nullptr);
|
|
|
mApp = this;
|
|
mApp = this;
|
|
|
}
|
|
}
|
|
@@ -25,7 +25,7 @@ D3DApp::D3DApp(HINSTANCE hInstance)
|
|
|
D3DApp::~D3DApp()
|
|
D3DApp::~D3DApp()
|
|
|
{
|
|
{
|
|
|
if (md3dDevice != nullptr) {
|
|
if (md3dDevice != nullptr) {
|
|
|
- FlushCommandQueue(); // 清空 GPU 命令
|
|
|
|
|
|
|
+ FlushCommandQueue(); // 娓呯┖ GPU 鍛戒护
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -87,11 +87,11 @@ bool D3DApp::Initialize()
|
|
|
|
|
|
|
|
LRESULT D3DApp::MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
LRESULT D3DApp::MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
{
|
|
|
- switch (msg)
|
|
|
|
|
- {
|
|
|
|
|
- default:
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ switch (msg)
|
|
|
|
|
+ {
|
|
|
|
|
+ default:
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
return DefWindowProc(hWnd, msg, wParam, lParam);
|
|
return DefWindowProc(hWnd, msg, wParam, lParam);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -119,7 +119,7 @@ void D3DApp::OnResize()
|
|
|
{
|
|
{
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 基本流程: 注册、创建、展示、更新
|
|
|
|
|
|
|
+// 鍩烘湰娴佺▼锛� 娉ㄥ唽銆佸垱寤恒€佸睍绀恒€佹洿鏂�
|
|
|
bool D3DApp::InitMainWindow()
|
|
bool D3DApp::InitMainWindow()
|
|
|
{
|
|
{
|
|
|
WNDCLASS wc;
|
|
WNDCLASS wc;
|
|
@@ -154,7 +154,7 @@ bool D3DApp::InitMainWindow()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
ShowWindow(mhMainWnd, SW_SHOW);
|
|
ShowWindow(mhMainWnd, SW_SHOW);
|
|
|
- UpdateWindow(mhMainWnd); // 迫使系统立即处理那些已经在消息队列中的绘制消息,确保窗口首次创建之后,会被立即正确绘制
|
|
|
|
|
|
|
+ UpdateWindow(mhMainWnd); // 杩�娇绯荤粺绔嬪嵆澶勭悊閭d簺宸茬粡鍦ㄦ秷鎭�槦鍒椾腑鐨勭粯鍒舵秷鎭�紝纭�繚绐楀彛棣栨�鍒涘缓涔嬪悗锛屼細琚�珛鍗虫�纭�粯鍒�
|
|
|
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
@@ -169,10 +169,10 @@ bool D3DApp::InitDirect3D()
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
- // 创建 DXGI
|
|
|
|
|
|
|
+ // 鍒涘缓 DXGI
|
|
|
ThrowIfFailed(CreateDXGIFactory1(IID_PPV_ARGS(&mdxgiFactory)));
|
|
ThrowIfFailed(CreateDXGIFactory1(IID_PPV_ARGS(&mdxgiFactory)));
|
|
|
|
|
|
|
|
- // 获得光栅器
|
|
|
|
|
|
|
+ // 鑾峰緱鍏夋爡鍣�
|
|
|
HRESULT hardwareResult = D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&md3dDevice));
|
|
HRESULT hardwareResult = D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&md3dDevice));
|
|
|
if (FAILED(hardwareResult)) {
|
|
if (FAILED(hardwareResult)) {
|
|
|
ComPtr<IDXGIAdapter> pWarpAdapter;
|
|
ComPtr<IDXGIAdapter> pWarpAdapter;
|
|
@@ -180,15 +180,15 @@ bool D3DApp::InitDirect3D()
|
|
|
ThrowIfFailed(D3D12CreateDevice(pWarpAdapter.Get(), D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&md3dDevice)));
|
|
ThrowIfFailed(D3D12CreateDevice(pWarpAdapter.Get(), D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&md3dDevice)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 创建围栏
|
|
|
|
|
|
|
+ // 鍒涘缓鍥存爮
|
|
|
ThrowIfFailed(md3dDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&mFence)));
|
|
ThrowIfFailed(md3dDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&mFence)));
|
|
|
|
|
|
|
|
- // 存储描述符大小
|
|
|
|
|
|
|
+ // 瀛樺偍鎻忚堪绗﹀ぇ灏�
|
|
|
mRtvDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
|
|
mRtvDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
|
|
|
mDsvDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV);
|
|
mDsvDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV);
|
|
|
mCbvSrvUavDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
|
|
mCbvSrvUavDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
|
|
|
|
|
|
|
|
- // 设置 4x 多重采样
|
|
|
|
|
|
|
+ // 璁剧疆 4x 澶氶噸閲囨牱
|
|
|
D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS msQualityLevels;
|
|
D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS msQualityLevels;
|
|
|
msQualityLevels.Format = mBackBufferFormat;
|
|
msQualityLevels.Format = mBackBufferFormat;
|
|
|
msQualityLevels.SampleCount = 4;
|
|
msQualityLevels.SampleCount = 4;
|
|
@@ -253,21 +253,21 @@ void D3DApp::FlushCommandQueue()
|
|
|
{
|
|
{
|
|
|
mCurrentFence++;
|
|
mCurrentFence++;
|
|
|
|
|
|
|
|
- // 发送一个信号到命令队列。当GPU处理到这一点时,它会将围栏对象 mFence 的值设置为 mCurrentFence。这样可以确保所有先前提交的命令都已经被GPU处理完毕
|
|
|
|
|
|
|
+ // 鍙戦€佷竴涓�俊鍙峰埌鍛戒护闃熷垪銆傚綋GPU澶勭悊鍒拌繖涓€鐐规椂锛屽畠浼氬皢鍥存爮瀵硅薄 mFence 鐨勫€艰�缃�负 mCurrentFence銆傝繖鏍峰彲浠ョ‘淇濇墍鏈夊厛鍓嶆彁浜ょ殑鍛戒护閮藉凡缁忚�GPU澶勭悊瀹屾瘯
|
|
|
mCommandQueue->Signal(mFence.Get(), mCurrentFence);
|
|
mCommandQueue->Signal(mFence.Get(), mCurrentFence);
|
|
|
|
|
|
|
|
if (mFence->GetCompletedValue() < mCurrentFence) {
|
|
if (mFence->GetCompletedValue() < mCurrentFence) {
|
|
|
- // 创建一个事件对象,这个事件用于等待围栏信号的完成
|
|
|
|
|
- HANDLE eventHandl = CreateEventEx(nullptr, false, false, EVENT_ALL_ACCESS);
|
|
|
|
|
|
|
+ // 鍒涘缓涓€涓�簨浠跺�璞★紝杩欎釜浜嬩欢鐢ㄤ簬绛夊緟鍥存爮淇″彿鐨勫畬鎴�
|
|
|
|
|
+ HANDLE eventHandle = CreateEventEx(nullptr, NULL, false, EVENT_ALL_ACCESS);
|
|
|
|
|
|
|
|
- // 为围栏设置一个完成事件。当围栏达到指定的 mCurrentFence 值时,eventHandl 事件会被设置为信号状态
|
|
|
|
|
- ThrowIfFailed(mFence->SetEventOnCompletion(mCurrentFence, eventHandl));
|
|
|
|
|
|
|
+ // 涓哄洿鏍忚�缃�竴涓�畬鎴愪簨浠躲€傚綋鍥存爮杈惧埌鎸囧畾鐨� mCurrentFence 鍊兼椂锛宔ventHandl 浜嬩欢浼氳�璁剧疆涓轰俊鍙风姸鎬�
|
|
|
|
|
+ ThrowIfFailed(mFence->SetEventOnCompletion(mCurrentFence, eventHandle));
|
|
|
|
|
|
|
|
- // 等待事件对象变为信号状态
|
|
|
|
|
- WaitForSingleObject(eventHandl, INFINITE);
|
|
|
|
|
|
|
+ // 绛夊緟浜嬩欢瀵硅薄鍙樹负淇″彿鐘舵€�
|
|
|
|
|
+ WaitForSingleObject(eventHandle, INFINITE);
|
|
|
|
|
|
|
|
- // 关闭事件句柄,释放系统资源
|
|
|
|
|
- CloseHandle(eventHandl);
|
|
|
|
|
|
|
+ // 鍏抽棴浜嬩欢鍙ユ焺锛岄噴鏀剧郴缁熻祫婧�
|
|
|
|
|
+ CloseHandle(eventHandle);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|