我在为全屏模式设置我的DirectX10 (Win32 32/c++)应用程序时遇到了一些问题。问题是,我想让我的应用程序从一开始就在全屏运行。这可以通过接受DXGISwapChain::SetFullScreenState函数来完成。这是可行的,但是我在我的Visualc++ 2008调试器中得到了一个小小的通知,它说:
DXGI警告:IDXGISwapChain::当前:由于应用程序不使用IDXGISwapChain::适当地指定在IDXGIOutput中不可用的DXGI_MODE_DESC::GetDisplayModeList或不使用而导致的全屏显示效率低下
这意味着DirectX将不会完全拥有图形存储库,而是将图像从前面翻转到后台缓冲区,而是将它们混合起来,这要慢得多。
现在,我确实启用了DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH,并且我确实试图调整缓冲区的大小,但我完全不知道进入全屏模式的最佳方式是什么。我看过MSDN,但在那里,他们大多认为您只能按Alt+Enter进入全屏,以免DXGI做所有的工作。如果有人,请张贴一些代码,使DirectX10进入全屏模式,并充分利用“翻转”,这将是一个很大的学徒!
对于任何对用于调整大小的代码感兴趣的人:
ReleaseCOM(m_pD3DRenderTargetView);
ReleaseCOM(m_pD3DDepthStencilView);
ReleaseCOM(m_pD3DDepthStencilBuffer);
DXGI_MODE_DESC* mod = new DXGI_MODE_DESC;
mod->Format = DXGI_FORMAT_R8G8B8A8_UNORM;
mod->Height = m_ScreenHeight;
mod->Width = m_ScreenWidth;
mod->RefreshRate.Denominator = 0;
mod->RefreshRate.Numerator = 0;
mod->ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
mod->Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
delete mod; mod = 0;
m_pSwapChain->ResizeTarget(mod);
HR(m_pSwapChain->ResizeBuffers(1, m_ScreenWidth, m_ScreenHeight, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH))
throw(Exception(GET_BUFFER_FAIL, AT));
//problem area
m_pSwapChain->SetFullscreenState(TRUE, NULL);
ID3D10Texture2D* pBackBuffer;
HR( m_pSwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*)&pBackBuffer))
throw(Exception(GET_BUFFER_FAIL, AT)); //continues as usual发布于 2009-07-01 08:12:34
您是否有理由删除您的模式desc?
您是否也尝试过将您的模式desc通过"FindClosestMatchingMode"?
看看http://msdn.microsoft.com/en-us/library/cc627095(VS.85).aspx,“全屏问题”一节包含了很多有用的信息。
发布于 2009-07-16 05:09:23
在DXGI (这是最有效的全屏显示模式)中启用翻转有一些先决条件:
1)您应该进入全屏状态,指定系统中存在的模式(可以使用IDXGIOutput::GetDisplayModeList的模式,也可以使用IDXGIOutput::FindClosestMatchingMode找到它)。您的代码只是指定屏幕分辨率,因此最可能的模式是正确设置的。
2)在SetFullscreenState之后,您应该使用正确的缓冲区大小匹配模式调用ResizeBuffers,这就是DXGI设置翻转模式的地方。通常情况下,如果应用程序没有在WM_SIZE上调用ResizeBuffers,那么它应该作为对SetFullscreenState转换发送的ResizeBuffers消息的反应而自然发生。您可以在ResizeBuffers之后手动调用SetFullscreenState,这也应该有效。
没错,MSDN有一篇很好的关于DXGI实践的文章,包括全屏转换:http://msdn.microsoft.com/en-us/library/cc627095(VS.85).aspx#Full_Screen_Issues。
https://stackoverflow.com/questions/1006039
复制相似问题