gpt4 book ai didi

c# - OpenGL闪烁问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:31 24 4
gpt4 key购买 nike

我正在尝试使用 C# 的包装器在 C++ 中制作多实例引擎。
以这样的方式制作引擎,即有一个像 CreateEngine 这样的函数,它将我希望初始化引擎的窗口或控件的句柄作为参数。
在 C# 中,我制作了一个自定义控件,它初始化 opengl 以进行绘图并具有渲染事件。
如果我只创建一个控件实例,一切正常,但是当我创建另一个放置在另一个窗口中的实例时,第二个实例会闪烁为黑色(尽管我的代码中没有提及黑色,但将透明屏幕颜色替换为黑色)。他们都没有画任何东西。相反,他们只是清除屏幕的颜色。第一个控件将空间清除为蓝色,第二个控件将空间清除为红色(理论上)。因为没有什么可画的,所以我认为我不必共享 wgl 列表或其他东西(我还是这样做了,但评论那部分代码不会解决任何问题)。

还有一些想法需要注意:我不是 OpenGL n00b 但这真的让我感到困惑。我还检查了我在这个区域所知道的一切。该问题仅在控件的更多实例出现时出现。在 C# 中,我重写了清除视口(viewport)的 OnPaint 事件,并且我每 33 毫秒使它无效。我还覆盖了 OnPaintBackground,因为这似乎会产生闪烁问题。

最佳答案

您可能想要探索双缓冲 - 如果您的机器有很多多余的马力,那么您可能不会注意到屏幕清除并使用单个控件重绘,但是只要有两个控件和所有设置/拆卸开销渲染管

基本上,双缓冲意味着您始终渲染到屏幕外表面,然后将其翻转为屏幕表面,当前屏幕表面变为屏幕外表面

这是一个教程(在谷歌上搜索 OpenGL 双缓冲,你会发现更多) http://www.swiftless.com/tutorials/opengl/smooth_rotation.html

关于c# - OpenGL闪烁问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3301210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com