12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using System;
- using UnityEngine.Experimental.Rendering;
-
- namespace UnityEngine.Rendering.Universal
- {
- // TODO: Draft. A convenience base class to wrap single texture into a type.
- internal abstract class SingleHistoryBase : CameraHistoryItem
- {
- private int m_Id;
- private RenderTextureDescriptor m_Descriptor;
- private Hash128 m_DescKey;
-
- /// <summary>
- /// Called internally on instance creation.
- /// Sets up RTHandle ids.
- /// </summary>
- public override void OnCreate(BufferedRTHandleSystem owner, uint typeId)
- {
- base.OnCreate(owner, typeId);
- m_Id = MakeId(0);
- }
-
- /// <summary>
- /// Get the history texture(s).
- /// </summary>
- public RTHandle GetTexture(int frameIndex = 0)
- {
- if ((uint)frameIndex >= GetHistoryFrameCount())
- return null;
- return storage.GetFrameRT(m_Id, frameIndex);
- }
-
- public RTHandle GetCurrentTexture()
- {
- return GetCurrentFrameRT(m_Id);
- }
-
- public RTHandle GetPreviousTexture()
- {
- return GetTexture(1);
- }
-
- internal bool IsAllocated()
- {
- return GetTexture() != null;
- }
-
- // True if the desc changed, graphicsFormat etc.
- internal bool IsDirty(ref RenderTextureDescriptor desc)
- {
- return m_DescKey != Hash128.Compute(ref desc);
- }
-
- private void Alloc(ref RenderTextureDescriptor desc)
- {
- AllocHistoryFrameRT(m_Id, GetHistoryFrameCount(), ref desc, GetHistoryName());
-
- m_Descriptor = desc;
- m_DescKey = Hash128.Compute(ref desc);
- }
-
- /// <summary>
- /// Release the history texture(s).
- /// </summary>
- public override void Reset()
- {
- ReleaseHistoryFrameRT(m_Id);
- }
-
- // Return true if the RTHandles were reallocated.
- internal bool Update(ref RenderTextureDescriptor cameraDesc)
- {
- if (cameraDesc.width > 0 && cameraDesc.height > 0 && cameraDesc.graphicsFormat != GraphicsFormat.None)
- {
- var historyDesc = GetHistoryDescriptor(ref cameraDesc);
-
- if (IsDirty(ref historyDesc))
- Reset();
-
- if (!IsAllocated())
- {
- Alloc(ref historyDesc);
- return true;
- }
- }
-
- return false;
- }
-
- protected abstract int GetHistoryFrameCount();
- protected abstract string GetHistoryName();
- protected abstract RenderTextureDescriptor GetHistoryDescriptor(ref RenderTextureDescriptor cameraDesc);
- }
- }
|