From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/Camera/ImageFilters.h | 46 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Runtime/Camera/ImageFilters.h (limited to 'Runtime/Camera/ImageFilters.h') diff --git a/Runtime/Camera/ImageFilters.h b/Runtime/Camera/ImageFilters.h new file mode 100644 index 0000000..36439af --- /dev/null +++ b/Runtime/Camera/ImageFilters.h @@ -0,0 +1,46 @@ +#pragma once + +#include "Renderable.h" + +class RenderTexture; +class Texture; +class Vector2f; +class GfxDevice; +namespace Unity { class Material; } + + +// Image filters functionality. Only used internally by the camera (and other minor places). +class ImageFilters +{ +public: + ImageFilters() : m_FirstTargetTexture(NULL), m_SecondTargetTexture(NULL), m_FinalTargetTexture(NULL) { } + + void AddImageFilter (const ImageFilter& filter); + void RemoveImageFilter (const ImageFilter& filter); + bool HasImageFilter() const { return !(m_AfterOpaque.empty() && m_AfterEverything.empty()); } + bool HasAfterOpaqueFilters() const { return !m_AfterOpaque.empty(); } + + void DoRender (RenderTexture* finalRT, bool forceIntoRT, bool afterOpaque, bool usingScreenToComposite, bool hdr = false); + void Prepare (bool forceIntoRT, bool hdr = false, int antiAliasing = 1); + RenderTexture* GetTargetBeforeOpaque (); + RenderTexture* GetTargetAfterOpaque (bool forceIntoRT, bool usingScreenToComposite); + RenderTexture* GetTargetFinal (); + RenderTexture* SwitchTargetToLDR (RenderTexture* oldRt, bool requestLinear); + void ReleaseTargetForLDR (RenderTexture** oldRt); + + static void Blit (Texture* source, RenderTexture* dest); + static void Blit (Texture* source, RenderTexture* dest, Unity::Material* mat, int pass, bool setRT); + static void BlitMultiTap (Texture* source, RenderTexture* dest, Unity::Material* mat, int count, const Vector2f* offsets); + static void DrawQuadNoGPUTimestamp (GfxDevice& device, bool invertY, float uvX, float uvY); + static void DrawQuad (GfxDevice& device, bool invertY, float uvX, float uvY); +private: + static void SetCurrentRenderTarget (RenderTexture* dest, UInt32 flags); + +private: + typedef std::vector Filters; + Filters m_AfterOpaque; + Filters m_AfterEverything; + RenderTexture* m_FirstTargetTexture; // has color & depth + RenderTexture* m_SecondTargetTexture; // has color only, reuses depth from first + RenderTexture* m_FinalTargetTexture; +}; -- cgit v1.1-26-g67d0