让Ogre使用外部渲染窗口
来源:互联网 发布:三生网络直销 编辑:程序博客网 时间:2024/05/16 05:48
就是让Ogre不自己创建渲染窗口,而由第三方来创建。比如C#写界面、Qt等等。
Ogre::NameValuePairList params; params["externalWindowHandle"] = Ogre::StringConverter::toString((size_t)(HWND)mWndHandle); mRoot->initialise(false); mWindow = mRoot->createRenderWindow("SampleBrowser", mWidth, mHeight, false, ¶ms);
对Ogre的例子浏览器SampleBrowser.h的setup函数做了如下修改。
/*----------------------------------------------------------------------------- | Extends setup to create dummy scene and tray interface. -----------------------------------------------------------------------------*/virtual void setup(){if(mWndHandle > 0){Ogre::NameValuePairList params; params["externalWindowHandle"] = Ogre::StringConverter::toString((size_t)(HWND)mWndHandle); mRoot->initialise(false); mWindow = mRoot->createRenderWindow("SampleBrowser", mWidth, mHeight, false, ¶ms);}else if(mWindow == NULL) mWindow = createWindow(); setupInput(mNoGrabInput);locateResources();
//...............................
}另外增加两个函数以在外部设置窗口大小,传递外部窗口句柄。
//! 设置外部窗口句柄void SetWindowHandle(int handle){mWndHandle = handle;}//! 设置外部窗口大小void SetWindowSize(int width, int height){mWidth = width;mHeight = height;}这样只需要在setup()调用前,通过SetWindowHandle设置有效的外部窗口句柄,就可以了。
但是为了混合,我使用了DLL的方式,把SampleBrowser输出为了DLL,然后再通过一个全局函数导出。
关键代码就第一段,你想往哪输出渲染就往哪。在Windows下DLL是一定被支持的,如果你将它弄成组件形式,那就更方便,但会增加易理解性。
C#端,用Kernel32.dll内的
LoadLibrary GetProcAddress 来动态加载DLL内的导出函数。
注意,C#内的委托,相当于函数指针。
public delegate void BrowserMainEx(IntPtr handle, int width, int height);handle就是窗口句柄了,width,height是宽高。
0 0
- 让Ogre使用外部渲染窗口
- Ogre中的多窗口渲染方法
- Ogre中的多窗口渲染方法
- Ogre中的多窗口渲染方法
- Ogre中的多窗口渲染方法
- 使用WTL+OGRE编写3D程序(4) - 多窗口的渲染
- 使用WTL+OGRE编写3D程序(4) - 多窗口的渲染
- Havok动画渲染Demo(使用Ogre)
- Havok动画渲染Demo(使用Ogre)
- Havok动画渲染Demo(使用Ogre)
- Ogre线程渲染,渲染设备无法恢复窗口停止响应的案例及解决办法
- 使用Ogre渲染生成的人物行走4-8图
- OGRE 渲染状态管理
- Ogre渲染目标
- OGRE 渲染 到 MFC
- Ogre的渲染系统
- OGRE 渲染流程
- Ogre主要渲染流程
- 年度回忆录-2014(上半年)
- 2014.09.14 周日-css-js-dom-dhtml
- 美女图片采集器 (源码+解析)
- java 枚举
- OSI七层模型详解
- 让Ogre使用外部渲染窗口
- 周末小测——A(POJ 1410 Intersection(计算几何))
- 【android】动态添加radiobutton以及设置特殊样式
- 经典排序算法汇总
- Java8 lamada
- c++ 模板之类模板
- 周末小测——D(POJ 3620)
- Java8 stream语法
- FOUR组第八周总结