Direct3D 10.1 アプリケーションで、D2D と D3D の描画コードを混在させようとしています。c0000005
描画コードは正常に動作しますが、アプリは不確定な時間 (時間ではなく分) の後に必ずクラッシュします (モジュール d3d11.dll で code を使用)。関連するコードのセクションを以下に掲載しました。他のビットを見たいかどうか尋ねてください。この質問に追加できます。
DeviceCreationFlags
D3D10.DeviceCreationFlags deviceflags = D3D10.DeviceCreationFlags.BgraSupport; // Doesn't work without this flag
デバイスの作成
SlimDX.Direct3D10_1.Device1.CreateWithSwapChain( null, D3D10.DriverType.Hardware, deviceflags, SlimDX.Direct3D10_1.FeatureLevel.Level_10_1, swapchaindesc, out device, out swapchain );
Direct2D の初期化
d2dFactory = new SlimDX.Direct2D.Factory(FactoryType.SingleThreaded);
using (var backBuffer = SlimDX.Direct3D10.Resource.FromSwapChain<SlimDX.Direct3D10.Texture2D>(swapchain, 0))
{
d2dSurf = backBuffer.AsSurface();
System.Drawing.SizeF dpi = d2dFactory.DesktopDpi;
d2dRt = SlimDX.Direct2D.RenderTarget.FromDXGI(d2dFactory, d2dSurf,
new SlimDX.Direct2D.RenderTargetProperties()
{
Usage = SlimDX.Direct2D.RenderTargetUsage.None,
Type = SlimDX.Direct2D.RenderTargetType.Default,
PixelFormat = new SlimDX.Direct2D.PixelFormat(SlimDX.DXGI.Format.Unknown, SlimDX.Direct2D.AlphaMode.Premultiplied),
});
color = new SlimDX.Color4(Color.White);
brush = new SlimDX.Direct2D.SolidColorBrush(d2dRt, color);
}
描画コード
private void Draw2D()
{
d2dRt.BeginDraw();
// Drawing code here
var hr = d2dRt.EndDraw();
if (hr != SlimDX.Direct2D.ResultCode.Success)
Console.WriteLine("EndDraw result: {0}", hr);
}
前もって感謝します!