Proof of concept using Skia with WPF without WindowsFormsHost
GPL-2.0 License
A proof-of-concept of a GPU-accelerated surface without using WindowsFormsHost
Create a GL context manually, render all the compute-intensive stuff on an
off-screen surface, and draw the result on a WPF-compatible control (in this
case SKElement
).
SkiaSharp's examples use a WindowsFormsHost control for GPU-accelerated rendering, which uses OpenTK.
There are however a few issues with WindowsFormsHost
:
AllowsTransparency
enabled shows no controls - no transparency possible
AllowsTransparency
, setting WindowStyle
to None
still shows a borderDragMove
don't work over a forms hostInstead of using OpenTK, we're creating a GL context through native calls on
opengl32.dll
. This code has already been provided in SkiaSharp's test suite:
_glContext = new WglContext();
_glContext.MakeCurrent();
Then, we initialize an offscreen surface as usual:
_grContext = GRContext.Create(GRBackend.OpenGL);
_surface = SKSurface.Create(_grContext, true, new SKImageInfo(width, height));
After drawing on the surface's canvas, we draw the result back on
SKElement
' canvas:
canvas.DrawSurface(_surface, new SKPoint(0f, 0f));
The surface is disposed and recreated when the SKElement
's size changes.