加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 结合Lazarus LCL和OpenGL

发布时间:2020-12-15 09:12:24 所属栏目:大数据 来源:网络整理
导读:我最近将一个大型程序从Delphi移到了Lazarus.大多数错误都被整理出来,我对Lazarus / FPC印象深刻.但有一个我无法弄清楚的错误. 我的应用程序有一个主要的OpenGL窗口和一些补充形式.最初,我使用Delphi VCL设计了这些表格,现在我已将它们移到了Lazarus LCL上.
我最近将一个大型程序从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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读