【问题标题】:C#/XNA - RenderTarget2D.GetData(), RenderTarget2D.SetData(): is it efficient for cloning textures per frame?C#/XNA - RenderTarget2D.GetData()、RenderTarget2D.SetData():每帧克隆纹理是否有效?
【发布时间】:2012-04-16 13:42:11
【问题描述】:

所以,从上一个问题开始,我发现我的解决方案是复制纹理以防止引用问题。但是,我在质疑:

    Color[] color = new Color[screen.Width * screen.Height];
    InputRenderTarget2D.GetData(Color);
    OutputRenderTarget2D.SetData(color);

首先,每秒运行 60 次是否有效?尽管它设置了 1 个纹理,但我对性能很偏执,并且希望将性能保持在其体面或最佳状态。会不会导致“严重掉帧”之类的?

第二,它会提高性能,而不是创建一个新的颜色数组,我回收一个?

【问题讨论】:

    标签: c# xna textures texture2d rendertarget


    【解决方案1】:

    我相信这会损害性能,因为 GetData()/SetData() 调用会将渲染目标数据传输到主内存。 IMO,更好的选择是使用相同大小的四边形将 InputRenderTarget2D 渲染到 OutputRenderTarget2D。这将阻止 CPU-GPU 数据传输。

    【讨论】:

    • 那么,将渲染目标设置为 OutputRenderTarget,然后通过 GPU 渲染 w/ quad 或 spritebatch 将 InputRenderTarget 渲染到该目标上?
    • ... 使用 spritebatch 也是一种可能的方式
    • 正确。当然,您可以按照自己的意愿渲染四边形。
    • 除了,当我尝试将 OutputRenderTarget 渲染到 Input via 时:
    • setRenderTarget(input) spritebatch.draw(output) setRenderTarget(null) 它说当它设置在卡上时我不能使用渲染目标。这就是我所坚持的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2014-08-31
    • 2011-05-31
    • 2010-12-18
    • 2015-04-16
    相关资源
    最近更新 更多