2009-04-28 65 views
0

我试图在多线程游戏引擎之上编写一个编辑器。理论上,通过编辑器,场景的内容可以完全改变,但是我还没有能够找到引擎应对变化的好方法。 (即在渲染器绘制它时删除一个实体)。另外,我很犹豫在每个使用可能被删除的实体或资源的实例上编写代码来管理锁。我想应该有一个相对更优雅的解决方案。多线程策略? (通过编辑器修改多线程引擎中的场景)

有没有人有任何想法或策略,我可以开始看?

谢谢!

回答

1

除了@lassevk建议的两阶段过程之外,您还可以使用Pipe structure将命令“推”到渲染器,以便这些更改获取渲染引擎的另一个工作项的形式。

例如,假设您的引擎遵循一个流程,比如:

  1. 计算持仓
  2. 过程物理
  3. 工艺灯工艺相机
  4. 渲染场景

您可以只添加位置0中的工作流程的新项目,称为Process Changes,它从Pip中提取信息并将其融入现场。

1

如果内存不是问题,您可以有两阶段的过程,其中更改在一个模型中完成,然后为渲染器拍摄快照,这样渲染器将始终看到一致的视图的模型。

+0

我同意,这种方式你只需要锁定在一个地方,“视图”。 – Groo 2009-04-28 15:03:57

+0

虽然它取决于需要多少内存,另一方面是您需要始终准备好快照,而不是在请求时传递数据。 – Groo 2009-04-28 15:08:37

0

不知道确切的需求,我很难评论细节,但我认为如果写入时复制和无锁数据结构的组合可能有所帮助。

当你在渲染时,你需要只读访问权限,所以没有问题。在编辑时,从一组对象中删除对象,使用原子操作将当前对象标记为“已删除”,并且您的渲染器可以在下一个渲染循环之前跳过或移除该对象。当一个对象被改变时,你创建一个副本并更改副本,并使用无锁技术“提交”更改。