我在寫一個非常簡單的建模軟件,更像是一個挑戰而非其他任何事情。 直到大約3個星期前,我對SwapChain.ResizeBuffers()函數沒有真正的問題。ResizeBuffers時出現DirectX無效呼叫
我更換了PC,切換到Visual Studio Express 2012(從Pro 9開始),並將我的解決方案切換到帶有相應SlimDX.dll的x64。
它仍然運行良好,但當我調整我的窗口託管視口,它得到:DXGI_ERROR_INVALID_CALL(-2005270527)。
谷歌快速搜索告訴我,戰地3也可能有一些具體的驅動程序的問題。可能嗎?
我讀過的一切,我能找到的有關功能,不知何故,我無法找到什麼樣的變化就是現在搞亂的東西了。希望有人能看到我做錯了什麼。
// Form we are attached to.
private Dockable dock;
// Rendering stuff.
private Device device;
private Viewport viewport;
private SwapChain swapChain;
private RenderTargetView renderView;
private DepthStencilView depthView;
public Renderer(Dockable form)
{
if (form == null)
return;
dock = form;
CreateSwapchain();
Resize();
}
private void CreateSwapchain()
{
// Swap Chain & Device
SwapChainDescription description = new SwapChainDescription()
{
BufferCount = 1,
Usage = Usage.RenderTargetOutput,
OutputHandle = dock.Handle,
IsWindowed = true,
ModeDescription = new ModeDescription(dock.ClientSize.Width, dock.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
SampleDescription = new SampleDescription(1, 0),
Flags = SwapChainFlags.AllowModeSwitch,
SwapEffect = SwapEffect.Discard
};
Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug, description, out device, out swapChain);
}
private void CreateRenderView()
{
// Dispose before resizing.
if (renderView != null)
renderView.Dispose();
if (depthView != null)
depthView.Dispose();
swapChain.ResizeBuffers(0, 0, 0, Format.Unknown, 0); // ERROR : DXGI_ERROR_INVALID_CALL when resizing the window, but not when creating it.
renderView = new RenderTargetView(device, Resource.FromSwapChain<Texture2D>(swapChain, 0));
Texture2DDescription depthBufferDesc = new Texture2DDescription()
{
ArraySize = 1,
BindFlags = BindFlags.DepthStencil,
CpuAccessFlags = CpuAccessFlags.None,
Format = Format.D16_UNorm,
Height = dock.ClientSize.Height,
Width = dock.ClientSize.Width,
MipLevels = 1,
OptionFlags = ResourceOptionFlags.None,
SampleDescription = new SampleDescription(1, 0),
Usage = ResourceUsage.Default
};
depthView = new DepthStencilView(device, new Texture2D(device, depthBufferDesc));
}
public void Resize()
{
CreateRenderView();
viewport = new Viewport(0.0f, 0.0f, dock.ClientSize.Width, dock.ClientSize.Height);
device.ImmediateContext.Rasterizer.SetViewports(viewport);
device.ImmediateContext.OutputMerger.SetTargets(depthView, renderView);
}
我打算猜測這個問題與SlimDX.dll有什麼關係,請聯繫作者尋求幫助。我建議只使用Microsoft庫,它似乎是你正在嘗試使用的庫,它有一個關鍵的錯誤。 –