一、Direct3D9 components cannot
在使用Direct3D9時,我們可能會碰到錯誤提示:Direct3D9 components cannot connect to the Real-Time Service,這其實是由於Real-Time Service服務未正常運行導致的。
解決方法:
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_Direct3D9, NULL, CLSCTX_INPROC_SERVER, IID_IDirect3D9, (VOID**)&pD3D);
if (FAILED(hr))
{
//錯誤處理
}
//其他操作
}
二、創建Direct3D9設備錯誤怎麼解決
創建Direct3D9設備是使用Direct3D的一個重要步驟,但是在使用時也可能出現錯誤。
解決方法:
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = TRUE;
HRESULT hr = pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pDevice);
if (hr == D3DERR_INVALIDCALL)
{
//錯誤處理
}
//其他操作
三、Direct3D9 components
在Direct3D9中,組件是指Direct3D9對象,有Direct3D9、IDirect3DDevice9、IDirect3DSurface9等。
以IDirect3DDevice9為例:
IDirect3DDevice9* pDevice = nullptr;
HRESULT hr = pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pDevice);
if (FAILED(hr))
{
//錯誤處理
}
//使用pDevice進行繪製等操作
pDevice->Release(); //用完後需要釋放
四、direct
在Direct3D9中,Direct代表直接,表示不需要通過其他庫或接口來實現,直接調用Direct3D9即可。這也是DirectX系列的特點之一。
五、Direct3D9組件現在無法連接
在使用Direct3D9時,也可能會出現組件無法連接的情況。
解決方法:
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_Direct3D9, NULL, CLSCTX_INPROC_SERVER, IID_IDirect3D9, (VOID**)&pD3D);
if (FAILED(hr))
{
//錯誤處理
}
else
{
DWORD check = pD3D->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D16);
if (check == D3DERR_NOTAVAILABLE)
{
//錯誤處理
}
//其他操作
}
CoUninitialize();
}
六、Direct3D9基本流程
Direct3D9的基本流程如下:
1、使用CoCreateInstance創建Direct3D9對象。
2、使用Direct3D9對象創建設備(IDirect3DDevice9)。
3、使用設備進行繪製等操作。
4、釋放設備。
5、釋放Direct3D9對象。
IDirect3D9* pD3D = nullptr;
IDirect3DDevice9* pDevice = nullptr;
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_Direct3D9, NULL, CLSCTX_INPROC_SERVER, IID_IDirect3D9, (VOID**)&pD3D);
if (FAILED(hr))
{
//錯誤處理
}
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = TRUE;
hr = pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pDevice);
if (FAILED(hr))
{
//錯誤處理
}
//使用pDevice進行繪製等操作
pDevice->Release();
pD3D->Release();
CoUninitialize();
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/282849.html
微信掃一掃
支付寶掃一掃