Monitor.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. namespace UnityEngine.Rendering.PostProcessing
  2. {
  3. public enum MonitorType
  4. {
  5. LightMeter,
  6. Histogram,
  7. Waveform,
  8. Vectorscope
  9. }
  10. public abstract class Monitor
  11. {
  12. public RenderTexture output { get; protected set; }
  13. internal bool requested = false;
  14. public bool IsRequestedAndSupported(PostProcessRenderContext context)
  15. {
  16. return requested
  17. && SystemInfo.supportsComputeShaders
  18. && !RuntimeUtilities.isAndroidOpenGL
  19. && ShaderResourcesAvailable(context);
  20. }
  21. internal abstract bool ShaderResourcesAvailable(PostProcessRenderContext context);
  22. internal virtual bool NeedsHalfRes()
  23. {
  24. return false;
  25. }
  26. protected void CheckOutput(int width, int height)
  27. {
  28. if (output == null || !output.IsCreated() || output.width != width || output.height != height)
  29. {
  30. RuntimeUtilities.Destroy(output);
  31. output = new RenderTexture(width, height, 0, RenderTextureFormat.ARGB32)
  32. {
  33. anisoLevel = 0,
  34. filterMode = FilterMode.Bilinear,
  35. wrapMode = TextureWrapMode.Clamp,
  36. useMipMap = false
  37. };
  38. }
  39. }
  40. internal virtual void OnEnable()
  41. {
  42. }
  43. internal virtual void OnDisable()
  44. {
  45. RuntimeUtilities.Destroy(output);
  46. }
  47. internal abstract void Render(PostProcessRenderContext context);
  48. }
  49. }