Jim's GameDev Blog

记录一个奇异的问题

2016-11-25

public class NewBehaviourScript : MonoBehaviour
{
    private void OnPreRender()
    {
        RenderTexture tempRT0 = RenderTexture.GetTemporary(512, 512, 0, RenderTextureFormat.ARGB32);
        RenderTexture tempRT1 = RenderTexture.GetTemporary(512, 512, 0, RenderTextureFormat.ARGB32);
        Graphics.Blit(tempRT0, tempRT1);
        Graphics.Blit(tempRT1, tempRT0);
        RenderTexture.ReleaseTemporary(tempRT0);
        RenderTexture.ReleaseTemporary(tempRT1);
    }
}

新建一个空场景,在主相机上挂载这段代码,然后运行,渲染结果是一片黑屏,只在特定项目的工程中会出现,Unity 版本是 4.7 的。然后尝试修复,对以上代码进行修改:

private void OnPreRender()
{
    RenderTexture currRT = RenderTexture.active;
    // ...
    RenderTexture.active = currRT;
}

上面代码中维护了一个当前活动的 RenderTexture,修复了上述的问题。具体是什么底层的原因还是未知。