public void DiscardDeviceResources()
        {
            _renderTarget?.Dispose();
            _renderTarget = null;

            if (_memDC != IntPtr.Zero && _hBitmap != IntPtr.Zero && _hOldBitmap != IntPtr.Zero)
            {
                Gdi32.SelectObject(_memDC, _hOldBitmap);
                Gdi32.DeleteObject(_hBitmap);
            }

            if (_memDC != IntPtr.Zero)
            {
                Gdi32.DeleteDC(_memDC);
            }

            if (_screenDC != IntPtr.Zero)
            {
                User32.ReleaseDC(IntPtr.Zero, _screenDC);
            }

            _hOldBitmap = IntPtr.Zero;
            _hBitmap    = IntPtr.Zero;
            _memDC      = IntPtr.Zero;
            _screenDC   = IntPtr.Zero;

            GC.Collect();
        }
        public void CreateDeviceResource()
        {
            if (_renderTarget == null)
            {
                _screenDC = User32.GetDC(IntPtr.Zero);
                _memDC    = Gdi32.CreateCompatibleDC(_screenDC);

                _cacheBmp = new Bitmap(_view_width, _view_height);

                _hBitmap    = _cacheBmp.GetHbitmap(Color.FromArgb(0, 0, 0, 0));
                _hOldBitmap = Gdi32.SelectObject(_memDC, _hBitmap);



                var renderProps = new RenderTargetProperties()
                {
                    Type        = RenderTargetType.Hardware,
                    Usage       = RenderTargetUsage.ForceBitmapRemoting,
                    PixelFormat = new PixelFormat(Vortice.DXGI.Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied),
                    MinLevel    = FeatureLevel.Default,
                    DpiX        = 96,
                    DpiY        = 96
                };

                _renderTarget = _d2dFactory.CreateDCRenderTarget(renderProps);

                _renderTarget.BindDC(_memDC, new Vortice.RawRect(0, 0, _view_width, _view_height));
            }
        }
示例#3
0
        private void CreateDeviceResource()
        {
            if (_renderTarget == null)
            {
                var width  = _view_width;
                var height = _view_height;

                _cacheBmp = new Bitmap(width, height);

                _hBitmap    = _cacheBmp.GetHbitmap(Color.FromArgb(0, 0, 0, 0));
                _hOldBitmap = Gdi32.SelectObject(_memDC, _hBitmap);


                var renderProps = new RenderTargetProperties()
                {
                    Type        = RenderTargetType.Hardware,
                    Usage       = RenderTargetUsage.None,
                    PixelFormat = new Vortice.DCommon.PixelFormat(Vortice.DXGI.Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied),
                    MinLevel    = FeatureLevel.Default
                };

                _renderTarget = _d2dFactory.CreateDCRenderTarget(renderProps);

                if (_cachedActiveBmp == null)
                {
                    var bmp = LoadD2D1BitmapFromBitmap(_renderTarget, _decorator.ActiveBitmapTemplate);
                    _cachedActiveBmp = _renderTarget.CreateSharedBitmap(bmp, new BitmapProperties
                    {
                        PixelFormat = bmp.PixelFormat
                    });
                }

                if (_cachedInactiveBmp == null)
                {
                    var bmp = LoadD2D1BitmapFromBitmap(_renderTarget, _decorator.InactiveBitmapTemplate);
                    _cachedInactiveBmp = _renderTarget.CreateSharedBitmap(bmp, new BitmapProperties
                    {
                        PixelFormat = bmp.PixelFormat
                    });
                }


                if (width > 0 && height > 0)
                {
                    _renderTarget.BindDC(_memDC, new Vortice.RawRect(0, 0, width, height));
                }
            }
        }
示例#4
0
        private void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            _disposed = true;

            if (Handle == IntPtr.Zero)
            {
                return;
            }

            if (_renderTarget != null)
            {
                _renderTarget.Dispose();
                _renderTarget = null;
            }

            _d2dFactory.Dispose();

            _d2dFactory = null;


            if (_memDC != IntPtr.Zero)
            {
                Gdi32.DeleteDC(_memDC);
            }

            if (_screenDC != IntPtr.Zero)
            {
                User32.ReleaseDC(IntPtr.Zero, _screenDC);
            }

            _memDC    = IntPtr.Zero;
            _screenDC = IntPtr.Zero;


            User32.DestroyWindow(Handle);
            Handle = IntPtr.Zero;
            gcHandle.Free();
        }
示例#5
0
        private void DiscardDeviceResource()
        {
            _renderTarget?.Dispose();
            _renderTarget = null;

            if (_memDC != IntPtr.Zero && _hBitmap != IntPtr.Zero && _hOldBitmap != IntPtr.Zero)
            {
                Gdi32.SelectObject(_memDC, _hOldBitmap);
                Gdi32.DeleteObject(_hBitmap);
            }


            _hOldBitmap = IntPtr.Zero;
            _hBitmap    = IntPtr.Zero;



            GC.Collect();
        }
示例#6
0
 internal D2D1DCRenderTarget(ID2D1DCRenderTarget renderTarget)
 {
     this.renderTarget = renderTarget;
 }
 internal D2D1DCRenderTarget(ID2D1DCRenderTarget renderTarget)
 {
     this.renderTarget = renderTarget;
 }