joa77
joa77

Reputation: 125

SkiaSharp drawing with OpenGL/Vulkan backend from console application

I want to draw something with GPU acceleration (using OpenGL or Vulkan) using SkiaSharp and save the image later. There is no need to display the image anywhere in the application, because it's a console application targeting Windows and Linux.

I already tried the following code, with various variations, but nothing worked (raises an exception at var surface = SKSurface.Create(context, false, info); because glInterface and context are null.

Can somebody give me a hint?

var glInterface = GRGlInterface.Create();
var context = GRContext.CreateGl(glInterface);

var info = new SKImageInfo(256, 256);
var surface = SKSurface.Create(context, false, info);
var canvas = surface.Canvas;

In the end it would be nice to have the ability to call SKBitmap.SetPixels(IntPrt) or something similar to set the resulting bitmap buffer to a specific place.

Upvotes: 0

Views: 3667

Answers (1)

joa77
joa77

Reputation: 125

The solution is you need to manually create an OpenGL context first. Have a look at https://github.com/mono/SkiaSharp/blob/master/tests/Tests/GRContextTest.cs for implementation details.

For copying the rendered pixel buffer you can use SKSurface.ReadPixels.

Upvotes: 2

Related Questions