我最近一直在困扰我的d3d11应用程序的缓慢启动,所以我开始调查,发现罪魁祸首是D3D11CreateDeviceAndSwapChain。这一次通话大约需要1.5秒。这对我来说似乎很疯狂。这也是你的经历吗?D3D11CreateDeviceAndSwapChain慢
这是设置代码:
DXGI_SWAP_CHAIN_DESC swap_chain_desc = {};
swap_chain_desc.BufferDesc.Width = window->window_width;
swap_chain_desc.BufferDesc.Height = window->window_height;
swap_chain_desc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
swap_chain_desc.SampleDesc.Count = 1;
swap_chain_desc.SampleDesc.Quality = 0;
swap_chain_desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swap_chain_desc.BufferCount = 2;
swap_chain_desc.OutputWindow = window->window_handle;
swap_chain_desc.BufferDesc.RefreshRate.Numerator = 60;
swap_chain_desc.BufferDesc.RefreshRate.Denominator = 1;
swap_chain_desc.Windowed = true;
swap_chain_desc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
swap_chain_desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
D3D_FEATURE_LEVEL feature_level = D3D_FEATURE_LEVEL_11_0;
D3D_FEATURE_LEVEL supported_feature_level;
UINT flags = 0;
#ifdef DEBUG
flags = D3D11_CREATE_DEVICE_DEBUG;
#endif
HRESULT hr = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, flags, &feature_level, 1, D3D11_SDK_VERSION,
&swap_chain_desc, &context.swapChain, &context.device, &supported_feature_level, &context.context);
''D3D11CreateDeviceAndSwapChain''是有点老派。现代最佳实践是独立创建设备和交换链。这也可能让你缩小一下过程的一部分走的是time.Take看看[Direct3D的11剖析创建设备(https://blogs.msdn.microsoft.com/chuckw/2014/02/05/解剖的-Direct3D的11创建设备/)。 –
感谢您的建议,我试过了,似乎D3D11CreateDevice的调用占用了大部分时间。 – user1760770
如果你不用''D3D11_CREATE_DEVICE_DEBUG''来做,它会更快吗? –