#pragma once #include class Renderer; struct RenderTarget; class SMAAPass { public: SMAAPass(Renderer& renderer); ~SMAAPass(); void render(VkCommandBuffer commandBuffer, RenderTarget* target); void createDescriptorSets(RenderTarget* target); VkRenderPass getEdgeRenderPass() const { return edgeRenderPass; } VkRenderPass getBlendRenderPass() const { return blendRenderPass; } private: void loadResources(); void setupDescriptorLayouts(); void createOffscreenResources(); void createRenderPasses(); void createPipelines(); VkImage areaImage; VkDeviceMemory areaMemory; VkImageView areaImageView; VkSampler areaSampler; VkImage searchImage; VkDeviceMemory searchMemory; VkImageView searchImageView; VkSampler searchSampler; VkSampler edgeSampler; VkSampler blendSampler; VkRenderPass edgeRenderPass, blendRenderPass; // edge VkDescriptorSetLayout edgeDescriptorSetLayout; VkPipelineLayout edgePipelineLayout; VkPipeline edgePipeline; // blend VkDescriptorSetLayout blendDescriptorSetLayout; VkPipelineLayout blendPipelineLayout; VkPipeline blendPipeline; Renderer& renderer; };