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)); } }
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)); } } }
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(); }
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(); }
internal D2D1DCRenderTarget(ID2D1DCRenderTarget renderTarget) { this.renderTarget = renderTarget; }
internal D2D1DCRenderTarget(ID2D1DCRenderTarget renderTarget) { this.renderTarget = renderTarget; }