游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5532|回复: 6

多线程渲染的问题

[复制链接]

12

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
发表于 2010-4-8 20:51:00 | 显示全部楼层 |阅读模式
最近试着把引擎的渲染模块分离到另一个线程中去,渲染线程我采用的方法是维护一个commandBuffer,里面放的是对D3D API 的调用命令,比如SetRenderState,SetVertexBuffer...,每一帧开始时先在Update函数中进行模型变换和一些逻辑处理,然后再调用Render函数发送渲染命令到渲染线程的commandBuffer中,并且在一帧的最后让逻辑线程等待渲染线程完成,再到下一帧。但现在遇到一个问题是每一帧必须等所有的逻辑处理都完成后才调用Render函数的,而渲染线程在渲染时逻辑线程又在等待,所以本质上和之前的单线程的串行结构是一样的,所以现在有几种解决方案:
1. 在Update函数中每完成一部分对象的更新就发送一条渲染命令,而不会在最后的Render中,但这样做便破坏了先update,再render的结构,用户也不能自由的在Render函数中实现自己的绘制功能了,如果用户还想用单线程的话改动就大了。
2. 每一帧渲染线程执行的是上一帧的渲染任务,但这样我觉得commandBuffer就没意义了,完全由一个渲染上下文就可以完成,或者用doubleBuffer也行。
所以不知道大家是怎样处理这种情况的,谢谢各位了! [em7]

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2010-4-8 23:55:00 | 显示全部楼层

Re:多线程渲染的问题

自己实现 command buffer 是没多大用处,因为 D3DRT 内部就有 CB,自己做不过是缓冲了一下而已。多线程渲染还是使用绘制上下文比较好,渲染本身的逻辑也比较复杂。对于用户自定义渲染的问题,可以用语法糖解决,看起来像是单线程的结构而已。不过多线程渲染要解决的问题很多,资源管理就是一大块。

12

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
 楼主| 发表于 2010-4-9 00:26:00 | 显示全部楼层

Re:多线程渲染的问题

嗯,是的,多线程渲染的确有很多问题来解决,比如现在顶点缓冲的Lock、Unlock的同步问题就很头疼,还有有时我会在逻辑线程里调用GetTransform函数,但如果这时上次的渲染还没结束,这时获得的肯定是旧的数据,暂时我先试试用网上的一些方法处理下,比如等待渲染完成之类的。。。那么用语法糖的话,具体该怎样设计呢,是不是就是说先把D3D的API封装一下,用户调用的话其实还是发了个消息或填充了一下绘制上下文?

13

主题

312

帖子

312

积分

中级会员

Rank: 3Rank: 3

积分
312
发表于 2010-4-9 10:20:00 | 显示全部楼层

Re:多线程渲染的问题

学习了!!!


---------------------------------------------------------------------

开源图形处理器体系结构论坛(OpenGPU论坛)  
http://www.opengpu.org/bbs/

OpenGPU Graphics Open Source community图形开源社区),聚焦领域(focus domain)包括:
  * GPU Architecture图形处理器体系结构).
  * Graphics Algorithm图形算法).
  * Open Source Rendering Engine开源渲染器).
  * Open Source GPU Simulator/RTL Implement开源GPU模拟器).
  * GPGPU Programming 面向通用的图形处理器编程
  * GPU General-purposed ComputingGPU通用计算).

12

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
 楼主| 发表于 2010-4-10 00:31:00 | 显示全部楼层

Re:多线程渲染的问题

嗯现在部分问题基本解决了,以前我是在逻辑线程每一帧结束时进行一次同步的,现在我只是把等待的语句移到了每一帧的一开始,效果就是渲染上一帧逻辑线程提交的渲染列表,我做了个测试让渲染线程完成时做个for循环的累加来模拟渲染要费许多时间,再在逻辑线程中也做累加,但不让累加的次数大于渲染线程的,结果在多线程模式下逻辑线程的累加几乎不会对FPS产生影响,而在单线程下FPS便明显下降了:),嗯..现在就是一些资源同步的问题了。。。

8

主题

111

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2010-4-11 12:16:00 | 显示全部楼层

Re:多线程渲染的问题

以前写过一篇文章,http://www.cnblogs.com/ixnehc/archive/2008/09/04/1284708.html,希望有帮助.
还有,干吗要调GetTransform()啊,对D3D的读取越少越好,Transform在上层肯定知道的吧.

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2010-5-2 19:13:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 19:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表