当我使用第二个用户表单时,OpenTK ClearColor不能正常工作

本文关键字:不能 ClearColor 常工作 工作 OpenTK 第二个 用户 表单 | 更新日期: 2023-09-27 18:11:30

我的程序是CAD类型的软件,我使用OpenTK进行图形处理。程序按预期工作——只有一个例外。我想允许用户改变从背景颜色开始渲染的东西的颜色。为了做到这一点,我创建了第二个用户表单(顺便说一句,这是一个窗口。窗体程序)允许用户通过RGB组件指定颜色。我在用户表单中有一个返回函数,它返回Color4。据我所知,一切都如我所愿——好吧,有点……

为了简化,我在下面包含了一段代码——它不起作用。_newColor确实捕获了正确的数据,然而,当它被传递给ClearColor时,无效的我的Form1客户窗口显示一个大的红色x

    private void button2_Click(object sender, EventArgs e)
    {
        Form2 f2tmp = new Form2();
        f2tmp.ShowDialog();
        Color4 _newColor = f2tmp.getColor();
        f2tmp.Dispose();
        GL.ClearColor(_newColor);
        glControl1.Invalidate();
    }

这个问题与第二个用户表单(Form2)有关。如果我把代码改成这样,它就可以工作了:

    private void button2_Click(object sender, EventArgs e)
    {
        Form2 f2tmp = new Form2();
        //f2tmp.ShowDialog();
        //Color4 _newColor = f2tmp.getColor();
        //f2tmp.Dispose();
        Color4 _newColor = new Color4(1f, 0f, 1f, 1f);
        GL.ClearColor(_newColor);
        glControl1.Invalidate();
    }

这样就把范围缩小到实际显示Form2。到底发生了什么事?

当我使用第二个用户表单时,OpenTK ClearColor不能正常工作

问题解决了:

    private void button2_Click(object sender, EventArgs e)
    {
        Form2 f2tmp = new Form2();
        f2tmp.ShowDialog();
        Color4 _newColor = f2tmp.getColor();
        f2tmp.Dispose();
        // Add this line
        glControl1.MakeCurrent();
        // ta-DA !!! works.
        GL.ClearColor(_newColor);
        glControl1.Invalidate();
    }