当我使用第二个用户窗体时,OpenTK ClearColor无法正常工作

时间:2013-04-30 21:04:14

标签: c# opentk

我的程序是CAD类型软件,我在其中使用OpenTK进行图形处理。该计划按预期运作 - 但有一个例外。我想让用户改变以背景颜色开始渲染的东西的颜色。为此,我创建了第二个用户窗体(BTW,这是一个windows.forms程序),允许用户通过RGB组件指定颜色。我在userform中有一个返回Color4的返回函数。从我可以说的一切都按预期工作 - 很好......

为了简化我在下面添加了一些代码 - 这不起作用。 _newColor会捕获正确的数据,但是,当它传递给ClearColor时,Invalidated我的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有关的内容。是什么给了什么?

1 个答案:

答案 0 :(得分:1)

这解决了这个问题:

    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();
    }