把KlayGE嵌入其他GUI框架
2013-06-13 16:02
183 查看
转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2496
长期以来,KlayGE一直是单独执行的,窗口上的UI也都是自己画。很多人都提到这么做给编辑器等应用造成了困难。所以如果适度修改KlayGE的窗口系统,使得KlayGE可以嵌入其他的GUI框架,比如MFC、QT、WPF等,有些时候会方便得多。
第一个尝试做这件事情,并且取得成功的在这里。他通过修改Window类,支持从外部传入HWND,让KlayGE复用外部建立的窗口。这么做能顺利地把KlayGE嵌入MFC等框架中。同时,作者也指出了单独这么改仍不能达到完美的程度,“并且由于KlayGE没有开放单独绘制一桢这样的函数,所以直接关闭程序会有内存泄漏和异常。以后再研究研究,试着把相关功能提取一下,做成和Ogre一样的,那样就可以在OnIdle()和OnPaint()时渲染一桢,在OnDestory()时清理资源。”
于是,我尝试除了改Window类之外,还进一步修改App3DFramework。原先的消息循环放在了渲染引擎里,通过StartRendering来调用。但实际上不同的渲染引擎插件,消息循环部分是一样的。或者说,消息循环取决于平台,而不取决于渲染引擎。所以这里做的第一件事情是把消息循环挪到App3DFramework中。渲染引擎之需要提供一个Refresh函数,负责渲染本身。同时,这个函数也可以在OnIdle的时候调用,也就解决了嵌入的问题。
就这样,用了很少的改动,就完成了嵌入。
长期以来,KlayGE一直是单独执行的,窗口上的UI也都是自己画。很多人都提到这么做给编辑器等应用造成了困难。所以如果适度修改KlayGE的窗口系统,使得KlayGE可以嵌入其他的GUI框架,比如MFC、QT、WPF等,有些时候会方便得多。
第一个尝试做这件事情,并且取得成功的在这里。他通过修改Window类,支持从外部传入HWND,让KlayGE复用外部建立的窗口。这么做能顺利地把KlayGE嵌入MFC等框架中。同时,作者也指出了单独这么改仍不能达到完美的程度,“并且由于KlayGE没有开放单独绘制一桢这样的函数,所以直接关闭程序会有内存泄漏和异常。以后再研究研究,试着把相关功能提取一下,做成和Ogre一样的,那样就可以在OnIdle()和OnPaint()时渲染一桢,在OnDestory()时清理资源。”
于是,我尝试除了改Window类之外,还进一步修改App3DFramework。原先的消息循环放在了渲染引擎里,通过StartRendering来调用。但实际上不同的渲染引擎插件,消息循环部分是一样的。或者说,消息循环取决于平台,而不取决于渲染引擎。所以这里做的第一件事情是把消息循环挪到App3DFramework中。渲染引擎之需要提供一个Refresh函数,负责渲染本身。同时,这个函数也可以在OnIdle的时候调用,也就解决了嵌入的问题。
就这样,用了很少的改动,就完成了嵌入。
相关文章推荐
- Android研究-GUI框架-Android的View的简单绘制流程
- GUI框架比较有感
- Android Multimedia框架总结(四)MediaPlayer中从Java层到C++层类关系及prepare及之后其他过程
- 其他标签及框架集
- pywinauto首页、文档和下载 - GUI 自动化测试框架 - 开源中国社区
- 【框架-MFC】CHtmlView(chenlu-1):将网页嵌入MFC的视图中
- symbian GUI应用 carbide c++生成的基本框架的解析
- 黑马程序员--线程之间的通信,等待与唤醒机制,线程的终止方式,线程中的其他方法,优先级,toString() 守护线程,GUI图形化界面
- 十大开源的.NET用户界面框架 让GUI设计不再犯难
- 嵌入式用户图形接口uC/GUI在uC/OSII上的嵌入
- Linux帧缓冲设备驱动程序框架及图形界面GUI的移植
- Visual WebGui 基于ajax的界面框架
- Android4.4 GUI系统框架之SurfaceFlinger
- Eclipse链接查看JDK及其他开源框架源码[转]
- 服务端开发,基本的框架结构图(SSH及其他)
- 破解&屏蔽防止嵌入框架代码 top.location != self.location
- python的各种GUI开发框架介绍
- 嵌入的iframe框架自适应宽度代码
- 防止网页被嵌入框架
- 【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。