我正在使用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与此主题有关,我不确定该如何跟进:
在某些平台上,窗口移动,调整大小或菜单操作将导致事件处理受阻。这是由于在这些平台上如何设计事件处理。在此类操作期间,您可以在必要时使用窗口刷新回调来重绘窗口的内容。