DX11交换链仅显示第一帧。在它和黑色图像之间翻转

时间:2012-07-13 19:16:02

标签: windows directx windows-8 directx-11

当我运行我的3D场景时,它只渲染第一帧然后在它和黑屏之间翻转,导致大量闪烁。我认为这是我的交换链没有正确设置,但我真的不知道。

这是我的代码来设置它。它几乎是从微软的例子中复制而来的。

DXGI_SWAP_CHAIN_DESC1 sd = {0};
sd.Width = 0;                           
sd.Height = 0;
sd.Format = DXGI_FORMAT_R8G8B8A8_UNORM; 
sd.Stereo = false; 
sd.SampleDesc.Count = 1;                
sd.SampleDesc.Quality = 0;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.BufferCount = 2;                     
sd.Scaling = DXGI_SCALING_NONE;
sd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
sd.Flags = 0;

CoreWindow^ window =  reinterpret_cast<CoreWindow^>(mSystem->GetIWindow());
hr = pIDXGIFactory->CreateSwapChainForCoreWindow(mD3DDevice,  reinterpret_cast<IUnknown*>(window), &sd, NULL, &mSwapChain);
EA_ASSERT(SUCCEEDED( hr ));

现在的代码:

DXGI_PRESENT_PARAMETERS  presentParameters = {0};
HRESULT hr = mSwapChain->Present1(0, 0, &presentParameters);

对我而言似乎非常直截了当,所以我不明白为什么它不起作用。

场景一直在运行。更新函数每帧都会运行。

另外,如果我在PIX中检查渲染,一切都很好。我得到了我期望渲染的东西。它只是没有出现在屏幕上。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:5)

事实证明我每帧都没有在我的设备上下文中调用OMSetRenderTargets。现在它有效。