当前位置 : 主页 > 编程语言 > delphi >

delphi – 结合Lazarus LCL和OpenGL

来源:互联网 收集:自由互联 发布时间:2021-06-23
我最近将一个大型程序从Delphi移到了Lazarus.大多数错误都被整理出来,我对Lazarus / FPC印象深刻.但有一个我无法弄清楚的错误. 我的应用程序有一个主要的OpenGL窗口和一些补充形式.最初,我
我最近将一个大型程序从Delphi移到了Lazarus.大多数错误都被整理出来,我对Lazarus / FPC印象深刻.但有一个我无法弄清楚的错误.

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

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

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

Form.ParentWindow := OpenGLWindow.h_wnd;

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

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

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

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

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

/ BlueIcaro

网友评论