结合Lazarus LCL和OpenGL

时间:2013-06-14 03:01:40

标签: delphi opengl vcl lazarus

我最近将一个大型程序从Delphi移到了Lazarus。大多数错误都被整理出来,我对Lazarus / FPC印象深刻。但是有一个我无法弄清楚的错误。

我的应用程序有一个主OpenGL窗口和一些补充表单。最初,我使用Delphi VCL设计了这些表格,现在我已将它们移到了Lazarus LCL上。

编辑:OpenGL窗口目前不是拼箱形式。它是使用Win32调用实现的,并且拥有自己的消息循环。

根据以下代码行,所有表单都被视为主OpenGL窗口的子窗口:

Form.ParentWindow := OpenGLWindow.h_wnd;

不幸的是,当表单归OpenGL窗口所有时,它们就会消失。当然,OpenGL窗口以30fps的帧速率刷新,这导致了屏幕缓冲问题。表单正在渲染,然后由OpenGL窗口呈现在顶部。

如果表单不属于主窗口,则问题得以解决。不幸的是,更改所有权对最终用户来说是非常具有破坏性的(菜单会在程序后面丢失等等)。

所以我想知道,我从哪里开始这样的问题?我是否需要确保表单内部有自己的屏幕缓冲区,或者是错误的想法?

澄清一些事情:我正在使用拼版的Win32版本,而不是QT或类似的东西。 另外,我尝试将表单设置为双缓冲,看看它是否会有所帮助,但事实并非如此。

1 个答案:

答案 0 :(得分:1)

尝试使用Lazarus附带的OpenGlControl。从componentes文件夹安装包。这些组件的工作方式类似于Tpaint,但它是一个opengl上下文。将它放在任何表单上,这个表单将是一个opengl上下文,但也是一个表单,可以移动,调整大小等。 看看组件附带的样品。

/ BlueIcaro