【问题标题】:SkiaSharp drawing with OpenGL/Vulkan backend from console application从控制台应用程序使用 OpenGL/Vulkan 后端的 SkiaSharp 绘图
【发布时间】:2020-07-01 05:53:09
【问题描述】:

我想使用 SkiaSharp 使用 GPU 加速(使用 OpenGL 或 Vulkan)绘制一些东西并稍后保存图像。无需在应用程序的任何位置显示图像,因为它是针对 Windows 和 Linux 的控制台应用程序。

我已经尝试了以下代码,有各种变体,但没有任何效果(在var surface = SKSurface.Create(context, false, info); 引发异常,因为glInterfacecontextnull

有人可以给我一个提示吗?

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;

最后,如果能够调用SKBitmap.SetPixels(IntPrt) 或类似的东西来将生成的位图缓冲区设置到特定位置,那就太好了。

【问题讨论】:

    标签: c# opengl .net-core vulkan skiasharp


    【解决方案1】:

    解决方案是您需要先手动创建 OpenGL 上下文。 请查看https://github.com/mono/SkiaSharp/blob/master/tests/Tests/GRContextTest.cs 了解实现细节。

    要复制渲染的像素缓冲区,您可以使用SKSurface.ReadPixels

    【讨论】:

    • 另一种方法是使用像 OpenTK 这样的库来为您完成所有工作,而无需使用自己的互操作。我只是不在测试中使用它,因为那是我当时所做的。对于实际应用程序,您可能希望使用 OpenGL/Vulkan 库来确保一切正常。而且,您可能还可以重用代码。
    • 我一开始就尝试使用 OpenTK,但无法使用窗口创建上下文
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2011-12-01
    • 1970-01-01
    • 2012-09-15
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多