最大化 OpenTK Window 不会调整显示对象的大小

Maximizing OpenTK Window doesnt resize the shown objects

我遇到了一个问题,每当我最大化 window 时,对象的大小并没有像它应该的那样改变。如果我只是调整 window 的大小,对象会按应有的比例缩放,只有最大化不起作用。

但是在 window 离开 最大化模式后发生了变化。所以回到正常window大小后,我只能看到渲染对象的一小部分。

The example 真的很简单;它只是画了一些三角形。

我认为没有发生任何有趣的事情;但他们包括这个覆盖:

protected override void OnResize(ResizeEventArgs e)
        {
            GL.Viewport(0, 0, Size.X, Size.Y);
            base.OnResize(e);
        }

所以我想这会在调整 window 大小时调整对象的大小。我为最大化事件尝试了类似的方法,但没有用:

protected override void OnMaximized(MaximizedEventArgs e)
        {
            GL.Viewport(0, 0, Size.X, Size.Y);
            base.OnMaximized(e);
        }

我什至把 GL.Viewport(0, 0, Size.X, Size.Y); 放在 OnRenderFrame(...) 函数的开头,但这也无济于事。 (Size.X 和 Size.Y 一直都是正确的,我查过了。)

你应该先调用base.OnResize然后更新视口大小,你不需要重写OnMaximized:

protected override void OnResize(ResizeEventArgs e)
{
    base.OnResize(e); // this should be called immediately
    GL.Viewport(0, 0, Size.X, Size.Y);
}

查看 OpenTK 源代码,您可以看到 Sizebase.OnResize(e) 方法中更新,因此您使用的是陈旧的值。