コード例 #1
0
        /// <summary>
        ///     レンダーターゲットを初期化します.
        /// </summary>
        private void InitializeTargets()
        {
            {
                // Direct3D レンダーターゲットの作成
                var desc = new D3D.Texture2DDescription
                {
                    Width             = size.Width,
                    Height            = size.Height,
                    MipLevels         = 1,
                    ArraySize         = 1,
                    Format            = Format.B8G8R8A8_UNorm,
                    SampleDescription = new SampleDescription(1, 0),
                    Usage             = D3D.ResourceUsage.Default,
                    BindFlags         = D3D.BindFlags.RenderTarget,
                    CpuAccessFlags    = D3D.CpuAccessFlags.None,
                    OptionFlags       = D3D.ResourceOptionFlags.GdiCompatible
                };
                d3dRenderTarget = new D3D.Texture2D(deviceManager.Device, desc);
            }
            {
                // レンダーターゲットビューの作成
                D3D.Texture2D target = D3DRenderTarget;
                var           desc   = new D3D.RenderTargetViewDescription
                {
                    Format    = target.Description.Format,
                    Dimension =
                        target.Description.SampleDescription.Count > 1
                            ? D3D.RenderTargetViewDimension.Texture2DMultisampled
                            : D3D.RenderTargetViewDimension.Texture2D,
                    MipSlice = 0
                };
                d3dRenderTargetView = new D3D.RenderTargetView(deviceManager.Device, target, desc);
            }
            // DXGIサーフェスの取得
            dxgiSurface = d3dRenderTarget.AsSurface();
            {
                // レンダーターゲットの作成
                var properties = new D2D.RenderTargetProperties
                {
                    Type                = D2D.RenderTargetType.Default,
                    PixelFormat         = new D2D.PixelFormat(dxgiSurface.Description.Format, D2D.AlphaMode.Premultiplied),
                    HorizontalDpi       = 0,
                    VerticalDpi         = 0,
                    Usage               = D2D.RenderTargetUsage.GdiCompatible,
                    MinimumFeatureLevel = D2D.FeatureLevel.Direct3D10
                };
                d2dRenderTarget           = D2D.RenderTarget.FromDXGI(deviceManager.D2DFactory, dxgiSurface, properties);
                d2dGdiInteropRenderTarget = new D2D.GdiInteropRenderTarget(d2dRenderTarget);
            }

            if (TargetsInitialized != null)
            {
                TargetsInitialized(this, new EventArgs());
            }
        }
コード例 #2
0
        /// <summary>
        ///     レンダーターゲットを破棄します.
        /// </summary>
        private void DestroyTargets()
        {
            if (DXGISurface != null && TargetsDestroying != null)
            {
                TargetsDestroying(this, new EventArgs());
            }

            SafeRelease(d2dGdiInteropRenderTarget);
            SafeRelease(d2dRenderTarget);
            SafeRelease(dxgiSurface);
            SafeRelease(d3dRenderTargetView);
            SafeRelease(d3dRenderTarget);

            d2dGdiInteropRenderTarget = null;
            d2dRenderTarget           = null;
            dxgiSurface         = null;
            d3dRenderTargetView = null;
            d3dRenderTarget     = null;
        }
コード例 #3
0
 public RenderTargetDC(D2D.GdiInteropRenderTarget renderTarget)
 {
     this.renderTarget = renderTarget;
     hdc = this.renderTarget.GetDC(D2D.DeviceContextInitializeMode.Copy);
 }