我正在编写一个使用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
直到窗口不再被调整大小时才触发。
似乎有some information返回的谷歌关于这个主题,我不知道如何跟进:
在某些平台上,窗口移动、调整大小或菜单操作将导致事件处理阻塞。这是由于这些平台上事件处理的设计方式所致。在此类操作过程中,您可以在必要时使用窗口刷新回调来重绘窗口内容。
1条答案
按热度按时间ruyhziif1#
尝试使用
而不是
OpenTK已经有高度和宽度值 分配给已创建的窗口