当我使用第二个用户表单时,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。到底发生了什么事?
问题解决了:
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();
}