我正在尝试使用C#的包装器在C中创建一个多实例引擎.
在以这样的方式制作引擎时,有一个像CreateEngine这样的函数,它将窗口或控件的句柄作为参数,我希望引擎被初始化.
在C#中,我制作了一个自定义控件,用于初始化用于绘图的opengl并具有渲染事件.
如果我只做一个控件实例一切正常但是当我创建另一个放在另一个窗口时,第二个闪烁为黑色(将清晰的屏幕颜色与黑色交替,尽管我的代码中没有黑色参考).他们俩都没有画任何东西.相反,他们只是清除屏幕的颜色.第一个控件将空间清除为蓝色,第二个控制将红色清除(理论上).
由于没有什么可以绘制的,我不认为我必须分享wgl列表或其他东西(无论如何我做了但是评论部分代码不会解决任何问题).
还有一些人想要注意:我不是一个OpenGL n00b,但这真让我感到困惑.我还检查了我所知道的这一领域.只有在控件的更多实例时才会出现此问题.
在C#中,我覆盖了清除视口的OnPaint事件,并且每隔33毫秒使其无效.我也覆盖了OnPaintBackground,因为这似乎会产生闪烁的问题.
最佳答案 您可能想要探索双缓冲 – 如果您的机器具有大量过剩的马力,那么您可能不会注意到屏幕清晰并使用单个控件重绘,但只要有两个控件和渲染管道中的所有设置/拆卸开销
基本上,双缓冲意味着您总是渲染到屏幕外表面,然后将其翻转为屏幕表面,当前屏幕表面成为屏幕外表面
继续教程(在谷歌搜索OpenGL双缓冲,你会发现更多)
http://www.swiftless.com/tutorials/opengl/smooth_rotation.html