查看: 2220|回复: 13

用osg开多个窗口速度明显变慢的问题

[复制链接]

该用户从未签到

发表于 2009-10-29 19:34:25 | 显示全部楼层 |阅读模式
如题,在用osg生成多个窗口显示不同场景时,速度明显变慢。请问这个可能是哪里的原因?如何改善?和硬件有关么?

该用户从未签到

发表于 2009-10-29 22:25:05 | 显示全部楼层
您没有提供足够的信息之前,抱歉我无法判断

该用户从未签到

 楼主| 发表于 2009-10-31 16:02:42 | 显示全部楼层
相同的内容在一个视口绘制的情况下速度在70帧,分两个slave视口同时绘制30帧,而输出窗口在不同的显卡上时25帧左右,三个slave视口在不同显卡上输出就剩10帧左右。这里是显卡的那些参数制约着这种变化?或者有什么方法可以改善?

该用户从未签到

发表于 2009-11-1 10:34:47 | 显示全部楼层
这个应该是不同窗口显示同一场景不同部分的时候信息传递和计算问题,,你也可以手动处理这些,OSG里面并没有做过多的处理,,这就是为什么有时候需要做分布式并行渲染~~~~我以前有个项目就是做这个的,,你可以参考一些分布式的论文来处理!!!

该用户从未签到

 楼主| 发表于 2009-11-1 13:12:04 | 显示全部楼层
我不需要并行分布式处理,在同一台电脑上输出三个窗口。

该用户从未签到

发表于 2009-11-1 14:27:09 | 显示全部楼层
好像每个窗口的线程都一直被开着,窗口越多,总的线程数就越多了。您是要这些窗口同时显示,还是只有一个窗口被显示呢?

该用户从未签到

发表于 2009-11-2 08:51:47 | 显示全部楼层
我记得由于OpenGL的设备上下文(RenderingContext,RC)操作并不支持多线程(即使获取的RC不同也不行),因此需要操作RC的窗口越多,帧数也就会随之下降。这一点可能不是OSG能够左右得了的。

该用户从未签到

发表于 2009-11-5 10:43:51 | 显示全部楼层
同一个屏幕显示三个窗口?同一个场景的三个窗口?这个应该跟网络传输关系不大

该用户从未签到

 楼主| 发表于 2009-11-6 15:01:58 | 显示全部楼层
本帖最后由 fenma3422 于 2009-11-6 15:20 编辑

我的机器上带了两个显卡,整个程序分三个窗口输出。每个窗口分别对应到一个显示器上(这里是三个显示器)。问题就是上面的问题。开的窗口越多,速度越慢。把他的渲染状态数据绘制出来如下: ,按图中所示,三个窗口的绘制是按串行顺序进行的,所以开的窗口越多就越慢。所以问题是,怎样才能让三个窗口并行绘制,这样速度会至少提高一倍。请问,怎样才能让其并行绘制呢?
三窗口绘制状态图.PNG

该用户从未签到

发表于 2009-11-6 16:11:51 | 显示全部楼层
就向我说的那样,OpenGL的设备上下文(RenderingContext,RC)操作好像并不支持多线程;所以我想从根本上在一台机器上就做不到并行渲染。不过我个人没有更深入的经验

该用户从未签到

 楼主| 发表于 2009-11-6 16:23:06 | 显示全部楼层
本帖最后由 fenma3422 于 2009-11-6 16:28 编辑

这个在windows系统和linux系统中是否都一样?都不支持并行渲染?这个东西速度不行会限制应用。我们现在想向linux下移植,如果linux下也不支持并行渲染,那么移植是没有意义的。

该用户从未签到

发表于 2009-11-6 17:15:13 | 显示全部楼层
如果OpenGL真的对多线程支持有限,那么在任何系统下都是一样的。
不过我个人不敢断定这一点(即OpenGL的RC操作是否真的不支持多线程),希望您再查一些资料

我所查到的结果是:
a rendering context can be used by many thread, but only *one* thread can make the rendering context current.
即,RC设备可以被多个线程所用,但是同一时刻只有一个线程可以成功执行wglMakeCurrent()

该用户从未签到

 楼主| 发表于 2009-11-6 17:44:54 | 显示全部楼层
谢谢array,我想的是这样的,就是osg不需要任何更改就可以直接实现并行绘制。这个限制应该是驱动级别的吧?我自己也闹不清楚,据说opengl3.0是支持并行绘制的。

该用户从未签到

发表于 2009-11-6 21:29:27 | 显示全部楼层
可能不是那么简单,为了解决“同一时刻只有一个线程可以成功wglMakeCurrent()”的问题,OSG花了很大精力来实现多线程的渲染方式,但是这并不是完全的多线程渲染——因为OpenGL层面还是单线程地去运作管线的。
我个人不太清楚3.0是否开始支持真正的并行渲染,事实上我也没有听说过这方面的消息,如果您有相关的资料,不妨大家分享一下。
如果驱动层面能够有大幅度改观的话,我想OSG会第一时间提供相应的支持的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表