// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. #pragma once #include "../RendererPass.h" #include "Engine/Graphics/GPUPipelineStatePermutations.h" #define SMAA_AREA_TEX TEXT("Engine/Textures/SMAA_AreaTex") #define SMAA_SEARCH_TEX TEXT("Engine/Textures/SMAA_SearchTex") /// /// Subpixel Morphological Anti-Aliasing effect. /// class SMAA : public RendererPass { private: PACK_STRUCT(struct Data { Float4 RtSize; }); AssetReference _shader; GPUPipelineStatePermutationsPs(Quality::MAX)> _psEdge; GPUPipelineStatePermutationsPs(Quality::MAX)> _psBlend; GPUPipelineState* _psNeighbor = nullptr; AssetReference _areaTex; AssetReference _searchTex; public: /// /// Performs AA pass rendering for the input task. /// /// The rendering context. /// The input render target. /// The output render target. void Render(RenderContext& renderContext, GPUTexture* input, GPUTextureView* output); private: #if COMPILE_WITH_DEV_ENV void OnShaderReloading(Asset* obj) { _psEdge.Release(); _psBlend.Release(); _psNeighbor->ReleaseGPU(); invalidateResources(); } #endif public: // [RendererPass] String ToString() const override { return TEXT("SMAA"); } void Dispose() override; protected: // [RendererPass] bool setupResources() override; };