调整窗口大小时重新绘制OpenTK

时间:2019-12-07 20:34:16

标签: c# opengl opentk

我正在使用OpenTK作为其图形库编写一个项目。

当我调整OpenTK.GameWindow的大小时,直到释放光标后框架才会更新。因此,视口的某些部分将被剪切(较小的尺寸)或填充为黑色(较大的尺寸)。我目前正在关注learn OpenTK tutorial,并且已经完成了绘制三角形的操作,并派生了新的子类OpenTK.GameWindow

以下是一些我用绘图逻辑覆盖的OpenTK.GameWindow事件:

        protected override void OnLoad(EventArgs e)
    {
        GL.ClearColor(0.2f, 0.3f, 0.3f, 1.0f);

        VertexBufferObject = GL.GenBuffer();
        GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject);
        GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.StaticDraw);

        shader = new Shader("Shaders\\shader.vert", "Shaders\\shader.frag");
        shader.Use();

        VertexArrayObject = GL.GenVertexArray();
        GL.BindVertexArray(VertexArrayObject);
        GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0);
        GL.EnableVertexAttribArray(0);
        GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject);

        base.OnLoad(e);
    }

    protected override void OnUnload(EventArgs e)
    {
        GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
        GL.BindVertexArray(0);
        GL.UseProgram(0);

        GL.DeleteBuffer(VertexBufferObject);
        GL.DeleteBuffer(VertexArrayObject);

        shader.Dispose();
        base.OnUnload(e);
    }

    protected override void OnRenderFrame(FrameEventArgs e)
    {
        GL.Clear(ClearBufferMask.ColorBufferBit);

        shader.Use();
        GL.BindVertexArray(VertexArrayObject);
        GL.DrawArrays(PrimitiveType.Triangles, 0, 3);

        Context.SwapBuffers();

        base.OnRenderFrame(e);
    }

    protected override void OnResize(EventArgs e)
    {
        GL.Viewport(0, 0, Width, Height);
        base.OnResize(e);
    }

我应该在OnUpdateFrame中加入一些逻辑来解决此问题吗?似乎OnResize不会触发,直到不再调整窗口大小为止。

Google似乎有some information与此主题有关,我不确定该如何跟进:

  

在某些平台上,窗口移动,调整大小或菜单操作将导致事件处理受阻。这是由于在这些平台上如何设计事件处理。在此类操作期间,您可以在必要时使用窗口刷新回调来重绘窗口的内容。

0 个答案:

没有答案