private void InitializeRenderTarget() { if (dcRenderTarget == null) { var props = new RenderTargetProperties { PixelFormat = new PixelFormat( Microsoft.WindowsAPICodePack.DirectX.Graphics.Format.B8G8R8A8UNorm, AlphaMode.Ignore), Usage = RenderTargetUsages.GdiCompatible }; dcRenderTarget = d2DFactory.CreateDCRenderTarget(props); brush = dcRenderTarget.CreateSolidColorBrush( new ColorF( ForeColor.R / 256f, ForeColor.G / 256f, ForeColor.B / 256f, 1)); } }
private void InitializeRenderTarget() { if (dcRenderTarget == null) { var props = new RenderTargetProperties { PixelFormat = new PixelFormat( DXGI.Format.B8G8R8A8_UNORM, AlphaMode.Ignore), Usage = RenderTargetUsage.GdiCompatible }; dcRenderTarget = d2DFactory.CreateDCRenderTarget(props); brush = dcRenderTarget.CreateSolidColorBrush( new ColorF( ForeColor.R / 256f, ForeColor.G / 256f, ForeColor.B / 256f, 1)); } }
private void InitializeRenderTarget() { if (dcRenderTarget == null) { var props = new RenderTargetProperties { PixelFormat = new PixelFormat( Microsoft.WindowsAPICodePack.DirectX.Graphics.Format.B8G8R8A8UNorm, AlphaMode.Ignore), Usage = RenderTargetUsages.GdiCompatible }; dcRenderTarget = d2DFactory.CreateDCRenderTarget(props); brush = dcRenderTarget.CreateSolidColorBrush( new ColorF( ForeColor.R / 256f, ForeColor.G / 256f, ForeColor.B / 256f, 1)); } }
protected override void Dispose(bool disposing) { if (disposing) { //dispose of all layouts while (layouts.Keys.Count > 0) { foreach (string key in layouts.Keys) { layouts[key].Dispose(); layouts.Remove(key); break; } } if (brush != null) { brush.Dispose(); } brush = null; if (dcRenderTarget != null) { dcRenderTarget.Dispose(); } dcRenderTarget = null; if (dwriteFactory != null) { dwriteFactory.Dispose(); } dwriteFactory = null; if (d2DFactory != null) { d2DFactory.Dispose(); } d2DFactory = null; } base.Dispose(disposing); }
protected override void Dispose(bool disposing) { if (disposing) { //dispose of all layouts while (layouts.Keys.Count > 0) foreach (string key in layouts.Keys) { layouts[key].Dispose(); layouts.Remove(key); break; } if (brush != null) brush.Dispose(); brush = null; if (dcRenderTarget != null) dcRenderTarget.Dispose(); dcRenderTarget = null; if (dwriteFactory != null) dwriteFactory.Dispose(); dwriteFactory = null; if (d2DFactory != null) d2DFactory.Dispose(); d2DFactory = null; } base.Dispose(disposing); }
private void SetRenderMode(RenderModes rm) { lock (renderSyncObject) { renderMode = rm; if (!IsInitialized && !isInitializing) return; //clean up objects that will be invalid after RenderTarget change if (dcRenderTarget != null) { dcRenderTarget.Dispose(); dcRenderTarget = null; } if (hwndRenderTarget != null) { hwndRenderTarget.Dispose(); hwndRenderTarget = null; } if (bitmapRenderTarget != null) { bitmapRenderTarget.Dispose(); bitmapRenderTarget = null; } peelings.Clear(); bitmap = null; //the bitmap created in dc render target can't be used in hwnd render target // Create the screen render target var size = new SizeU((uint)ClientSize.Width, (uint)ClientSize.Height); var props = new RenderTargetProperties { PixelFormat = new PixelFormat( Format.B8G8R8A8UNorm, AlphaMode.Ignore), Usage = RenderTargetUsages.GdiCompatible }; if (renderMode == RenderModes.DCRenderTarget || renderMode == RenderModes.BitmapRenderTargetOnPaint) { dcRenderTarget = d2DFactory.CreateDCRenderTarget(props); if (renderMode == RenderModes.BitmapRenderTargetOnPaint) { bitmapRenderTarget = dcRenderTarget.CreateCompatibleRenderTarget( CompatibleRenderTargetOptions.GdiCompatible, new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); } render = null; } else { hwndRenderTarget = d2DFactory.CreateHwndRenderTarget( props, new HwndRenderTargetProperties(Handle, size, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PresentOptions.RetainContents)); if (renderMode == RenderModes.BitmapRenderTargetRealTime) { bitmapRenderTarget = hwndRenderTarget.CreateCompatibleRenderTarget( CompatibleRenderTargetOptions.GdiCompatible, new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); } render = RenderSceneInBackground; } //move all shapes to new rendertarget and refresh foreach (var shape in drawingShapes) { shape.Bitmap = Bitmap; shape.RenderTarget = RenderTarget; } RefreshAll(); } }
/// <summary> /// Dispose of resources (IDisposable implementation) /// </summary> /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param> protected override void Dispose(bool disposing) { if (disposing && !disposed) { lock (renderSyncObject) { render = null; lock (sharedSyncObject) { if (sharedD2DFactory != null && d2DFactory == sharedD2DFactory) sharedRefCount--; if (d2DFactory != null && d2DFactory != sharedD2DFactory) d2DFactory.Dispose(); d2DFactory = null; if (dwriteFactory != null && dwriteFactory != sharedDwriteFactory) dwriteFactory.Dispose(); dwriteFactory = null; if (wicFactory != null && wicFactory != sharedWicFactory) wicFactory.Dispose(); wicFactory = null; if (sharedRefCount == 0) { if (sharedD2DFactory != null) sharedD2DFactory.Dispose(); sharedD2DFactory = null; if (sharedDwriteFactory != null) sharedDwriteFactory.Dispose(); sharedDwriteFactory = null; if (sharedWicFactory != null) sharedWicFactory.Dispose(); sharedWicFactory = null; } } foreach (DrawingShape shape in drawingShapes) { shape.Dispose(); } if (bitmap != null) bitmap.Dispose(); bitmap = null; if (dcRenderTarget != null) dcRenderTarget.Dispose(); dcRenderTarget = null; if (bitmapRenderTarget != null) bitmapRenderTarget.Dispose(); bitmapRenderTarget = null; if (hwndRenderTarget != null) hwndRenderTarget.Dispose(); hwndRenderTarget = null; disposed = true; } } base.Dispose(disposing); }
private void SetRenderMode(RenderModes rm) { lock (renderSyncObject) { renderMode = rm; //if (!IsInitialized && !isInitializing) // return; //clean up objects that will be invalid after RenderTarget change if (dcRenderTarget != null) { dcRenderTarget.Dispose(); dcRenderTarget = null; } if (hwndRenderTarget != null) { hwndRenderTarget.Dispose(); hwndRenderTarget = null; } if (bitmapRenderTarget != null) { bitmapRenderTarget.Dispose(); bitmapRenderTarget = null; } //bitmap = null; //the bitmap created in dc render target can't be used in hwnd render target // Create the screen render target RECT cRect; User32.GetClientRect(fWindowHandle, out cRect); var size = new SizeU((uint)cRect.Width, (uint)cRect.Height); PixelFormat pFormat = new PixelFormat(Format.B8G8R8A8_UNORM, AlphaMode.Ignore); var props = new RenderTargetProperties {PixelFormat = pFormat, Usage = RenderTargetUsage.GdiCompatible}; //if (renderMode == RenderModes.DCRenderTarget || renderMode == RenderModes.BitmapRenderTargetOnPaint) //{ // dcRenderTarget = d2DFactory.CreateDCRenderTarget(props); // if (renderMode == RenderModes.BitmapRenderTargetOnPaint) // { // bitmapRenderTarget = // dcRenderTarget.CreateCompatibleRenderTarget( // CompatibleRenderTargetOptions.GdiCompatible, // new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); // } // render = null; //} //else { HwndRenderTargetProperties hProps = new HwndRenderTargetProperties(fWindowHandle, size, PresentOptions.RetainContents); hwndRenderTarget = d2DFactory.CreateHwndRenderTarget(props, hProps); //if (renderMode == RenderModes.BitmapRenderTargetRealTime) //{ // bitmapRenderTarget = // hwndRenderTarget.CreateCompatibleRenderTarget( // CompatibleRenderTargetOptions.GdiCompatible, // new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); //} //render = RenderSceneInBackground; } } }
private void SetRenderMode(RenderModes rm) { lock (renderSyncObject) { renderMode = rm; if (!IsInitialized && !isInitializing) { return; } //clean up objects that will be invalid after RenderTarget change if (dcRenderTarget != null) { dcRenderTarget.Dispose(); dcRenderTarget = null; } if (hwndRenderTarget != null) { hwndRenderTarget.Dispose(); hwndRenderTarget = null; } if (bitmapRenderTarget != null) { bitmapRenderTarget.Dispose(); bitmapRenderTarget = null; } peelings.Clear(); bitmap = null; //the bitmap created in dc render target can't be used in hwnd render target // Create the screen render target var size = new SizeU((uint)ClientSize.Width, (uint)ClientSize.Height); var props = new RenderTargetProperties { PixelFormat = new PixelFormat( Format.B8G8R8A8UNorm, AlphaMode.Ignore), Usage = RenderTargetUsages.GdiCompatible }; if (renderMode == RenderModes.DCRenderTarget || renderMode == RenderModes.BitmapRenderTargetOnPaint) { dcRenderTarget = d2DFactory.CreateDCRenderTarget(props); if (renderMode == RenderModes.BitmapRenderTargetOnPaint) { bitmapRenderTarget = dcRenderTarget.CreateCompatibleRenderTarget( CompatibleRenderTargetOptions.GdiCompatible, new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); } render = null; } else { hwndRenderTarget = d2DFactory.CreateHwndRenderTarget( props, new HwndRenderTargetProperties(Handle, size, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PresentOptions.RetainContents)); if (renderMode == RenderModes.BitmapRenderTargetRealTime) { bitmapRenderTarget = hwndRenderTarget.CreateCompatibleRenderTarget( CompatibleRenderTargetOptions.GdiCompatible, new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); } render = RenderSceneInBackground; } //move all shapes to new rendertarget and refresh foreach (var shape in drawingShapes) { shape.Bitmap = Bitmap; shape.RenderTarget = RenderTarget; } RefreshAll(); } }
/// <summary> /// Dispose of resources (IDisposable implementation) /// </summary> /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param> protected override void Dispose(bool disposing) { if (disposing && !disposed) { lock (renderSyncObject) { render = null; lock (sharedSyncObject) { if (sharedD2DFactory != null && d2DFactory == sharedD2DFactory) { sharedRefCount--; } if (d2DFactory != null && d2DFactory != sharedD2DFactory) { d2DFactory.Dispose(); } d2DFactory = null; if (dwriteFactory != null && dwriteFactory != sharedDwriteFactory) { dwriteFactory.Dispose(); } dwriteFactory = null; if (wicFactory != null && wicFactory != sharedWicFactory) { wicFactory.Dispose(); } wicFactory = null; if (sharedRefCount == 0) { if (sharedD2DFactory != null) { sharedD2DFactory.Dispose(); } sharedD2DFactory = null; if (sharedDwriteFactory != null) { sharedDwriteFactory.Dispose(); } sharedDwriteFactory = null; if (sharedWicFactory != null) { sharedWicFactory.Dispose(); } sharedWicFactory = null; } } foreach (DrawingShape shape in drawingShapes) { shape.Dispose(); } if (bitmap != null) { bitmap.Dispose(); } bitmap = null; if (dcRenderTarget != null) { dcRenderTarget.Dispose(); } dcRenderTarget = null; if (bitmapRenderTarget != null) { bitmapRenderTarget.Dispose(); } bitmapRenderTarget = null; if (hwndRenderTarget != null) { hwndRenderTarget.Dispose(); } hwndRenderTarget = null; disposed = true; } } base.Dispose(disposing); }