private void CreateAndBindTargets() { d3DSurface.SetRenderTarget(null); Disposer.SafeDispose(ref d2DRenderTarget); Disposer.SafeDispose(ref sharedTarget); Disposer.SafeDispose(ref dx11Target); var width = Math.Max((int)ActualWidth, 100); var height = Math.Max((int)ActualHeight, 100); var frontDesc = new Texture2DDescription { BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, Format = Format.B8G8R8A8_UNorm, Width = width, Height = height, MipLevels = 1, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Default, OptionFlags = ResourceOptionFlags.Shared, CpuAccessFlags = CpuAccessFlags.None, ArraySize = 1 }; var backDesc = new Texture2DDescription { BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, Format = Format.B8G8R8A8_UNorm, Width = width, Height = height, MipLevels = 1, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Default, OptionFlags = ResourceOptionFlags.None, CpuAccessFlags = CpuAccessFlags.None, ArraySize = 1 }; sharedTarget = new Texture2D(device, frontDesc); dx11Target = new Texture2D(device, backDesc); using (var surface = dx11Target.QueryInterface <Surface>()) { d2DRenderTarget = new SharpDX.Direct2D1.DeviceContext(surface, new CreationProperties() { Options = DeviceContextOptions.EnableMultithreadedOptimizations, #if DEBUG DebugLevel = DebugLevel.Information, #endif ThreadingMode = ThreadingMode.SingleThreaded }); } resCache.RenderTarget = d2DRenderTarget; d3DSurface.SetRenderTarget(sharedTarget); device.ImmediateContext.Rasterizer.SetViewport(0, 0, width, height, 0.0f, 1.0f); TargetsCreated(); }
public abstract void Render(SharpDX.Direct2D1.DeviceContext target);