RThandle

前言

SRP的接口一直在更改,是时候仔细看看RTHandle系统了。

看RTHandle之前,先看看RenderTexture。

基本的理解就是RT数据是保存在GPU上的,RT仅仅是CPU这里对其管理的一个工具。
而Texture的数据才是能直接在CPU读取的,使用时会加载到显存中。

而RTHandle又是干啥的?

RTHandle system

通篇看下来,最主要的目的就是为了处理不同RT的分辨率问题。

假使有多个相机要渲染不同的分辨率,那就要为各个RT分配不同分辨率的RT。而临时RT仅能在分辨率和属性完全相同的情况下复用,所以总体的内存使用量是全部各种分辨率的内存总和。
所以RTHandle system 应运而生,这使得在不同分辨率的相机之间复用RT变得简单。
不再固定分辨率分配纹理,而是用给定的全屏分辨率相关的比例来分配

具体使用

具体的用法上,不再像之前每帧去取一个TMPRT,而是用RTHandles.Alloc来让RTHandle system分配一个。
为了解决分辨率动态修改的问题,SRP还提供了一些工具函数,比如RenderingUtils.ReAllocateIfNeeded这里根据是否已经分配和是否分辨率等参数需要修改,来重新分配一个RTHandle。这个一般在OnCameraSetup中调用。

如果要设置渲染目标,就调用CoreUtils.SetRenderTarget
设置全局或局部纹理,就普通的cmd.SetGlobalTexture就好。
最后不要忘记Release()释放


RThandle
https://www.kuanmi.top/2023/07/19/RThandle/
作者
KuanMi
发布于
2023年7月20日
许可协议