我目前正在研究涉及地形变形的蠕虫游戏。我曾经使用.GetData,修改颜色数组,然后使用.SetData来做,但我改变了它,以便在GPU上完成工作(使用RenderTargets)。
一切顺利,但我遇到了另一个问题。我对地形的整个碰撞检测是基于表示地形的颜色数组,但我不再有那个颜色数组了。每次修改地形以更新我的Color数组时,我都可以使用.GetData,但这会破坏我初始更改的目的。
我可以接受的是在开始时使用GetData一次,然后根据我稍后通过其他方式对地形所做的更改来修改该数组。我不知道怎么会这样做,有人可以帮忙吗?
答案 0 :(得分:0)
我做了一些研究,我还没有找到解决方案,每次修改地形时都要去除任何GetData调用,但我找到了“优化”它的方法,或者至少减少了尽可能多地调用GetData。
火山口绘图是批处理的,这意味着我不是在创建每个渲染时绘制它们,而是将它们添加到列表中并每隔几帧绘制一次。这减少了GetData调用的数量 - 每批陨石坑一个而不是每个陨石坑一个。
将陨石坑绘制到渲染目标后,我等待几帧,然后调用GetData以确保GPU已处理完所有绘图命令。这可以最大限度地减少管道停滞。
如果我有一个挂起的GetData调用,并且有更多的陨石坑进来,陨石坑将保持批处理,直到GetData调用完成。换句话说,绘图和获取是同步的,因此在绘制一批陨石坑后,GetData调用总是会发生几帧,并且任何新的陨石坑绘制请求都会等到待处理的GetData之后。
如果其他人有任何其他建议我仍然会很高兴听到他们。