【发布时间】:2020-05-10 16:03:38
【问题描述】:
我目前正在尝试绘制 Gtk# 的 GLArea。遗憾的是,Gtk# 没有附带 GL 函数,只提供上下文创建。
我现在正在尝试使用 Gtk# 的 GLArea 获得最新的 OpenTK 预发布版(4.0.0-pre.10)。
using Gtk;
using OpenToolkit.Graphics.OpenGL4;
using OpenToolkit.Windowing.GraphicsLibraryFramework;
namespace Test
{
class Viewport : GLArea
{
protected override bool OnRender(Gdk.GLContext context)
{
GL.ClearColor(0.3f, 0.3f, 0.3f, 1.0f);
GL.Clear(ClearBufferMask.ColorBufferBit);
return true;
}
}
class MainWindow : Gtk.Window
{
public MainWindow() : base(WindowType.Toplevel)
{
this.Add(new Viewport());
}
}
class Program
{
static void Main(string[] args)
{
GLFW.Init();
GL.LoadBindings(new GLFWBindingsContext());
Application.Init();
var window = new MainWindow();
window.ShowAll();
Application.Run();
}
}
}
问题是 GL 函数似乎没有被加载,第一次尝试调用其中一个函数会产生 System.AccessViolationException。
我真的找不到任何关于如何初始化 OpenTK 4.0 绑定的信息。 OpenTK 3 有 OpenTK.Toolkit.Init() 这似乎正是我所需要的。
OpenTK.Toolkit.Init 的文档:
“如果您将 OpenTK 与第三方窗口工具包(例如 GTK#)结合使用,则必须调用此方法。在这种情况下,这应该是您的应用程序调用的第一个方法”
我在第 4 版中找不到此功能或类似功能。它似乎刚刚被删除。
我也不能使用 OpenTK 3,因为它缺乏对 .Net Core 的支持。我通过创建一个 OpenTK 虚拟窗口并立即将其丢弃,从而使一切正常工作。这会初始化 GL.* 函数,但您会看到第二个窗口打开和关闭一秒钟。我真的不想使用这样的解决方法。
有人对如何正确初始化 OpenTK 4.0 绑定有任何见解吗?我的意思是,必须有一种方法,否则绑定对于很多用例来说基本上是无用的。
【问题讨论】: