【发布时间】:2010-08-04 07:08:14
【问题描述】:
我正在尝试用 C++ 制作一个带有 C# 包装器的多实例引擎。
在以这样的方式制作引擎时,有一个像 CreateEngine 这样的函数,它将我希望初始化引擎的窗口或控件的句柄作为参数。
在 C# 中,我创建了一个自定义控件,用于初始化 opengl 以进行绘图并具有渲染事件。
如果我只制作控件的一个实例,一切正常,但是当我创建另一个放置在另一个窗口中的实例时,第二个会闪烁为黑色(尽管我的代码中没有提到黑色,但将清晰的屏幕颜色与黑色交替显示)。他们都没有画任何东西。相反,他们只是清除屏幕的颜色。第一个控件将空间清除为蓝色,第二个控件将空间清除为红色(理论上)。
由于没有什么可画的,我认为我不必分享 wgl 列表或其他东西(我还是这样做了,但评论那部分代码不会解决任何问题)。
还有一些需要注意的地方:我不是一个 OpenGL n00b,但这真的让我很困惑。我还检查了我在这个领域所知道的一切。只有当控件的实例更多时才会出现问题。 在 C# 中,我重写了清除视口的 OnPaint 事件,并且每 33 毫秒使其无效。我还覆盖了 OnPaintBackground,因为这似乎会产生闪烁问题。
【问题讨论】:
-
在尝试使用 OpenGL 命令之前,您是否使每个上下文都是最新的?
-
是的。我有一个在每次渲染之前调用的 SetCurrentEngine 命令,并且该函数调用 wglMakeCurrent。