所有使用WPF的SharpDX实现似乎都在使用D3DImage而不是创建交换链。我知道这可能会导致重度渲染导致闪烁。
我创建了一个像这样的Swapchain:
var desc = new SwapChainDescription() {
BufferCount = 1,
ModeDescription = new ModeDescription(width, height, new Rational(60, 1), Format.R8G8B8A8_UNorm),//sview
IsWindowed = true,
OutputHandle = handle,
SampleDescription = new SampleDescription(1, 0),
SwapEffect = SwapEffect.Discard,
Usage = Usage.RenderTargetOutput
};
FeatureLevel[] levels = new FeatureLevel[] { FeatureLevel.Level_11_0, FeatureLevel.Level_10_1, FeatureLevel.Level_10_0 };
DeviceCreationFlags flag = DeviceCreationFlags.None;
Device11.CreateWithSwapChain(SharpDX.Direct3D.DriverType.Hardware, flag, levels, desc, out _device, out _swapchain);
处理作为我的WPF窗口的IntPtr,检索如下:
IntPtr windowHandle = new WindowInteropHelper(this).Handle;
它似乎工作,我可以清除窗口并在设备上运行Present。 这是否意味着我将其呈现为"正常"游戏对象或RenderForm现在还是只是指向D3DImage的windowHandle?
编辑。 我已经意识到当我在设备上运行Present()时,该窗口上的所有控件都会消失。也许这就是为什么你不能这样做的原因。