#pragma once #include #include #include "hwrenderer/postprocessing/hw_postprocess.h" #include "vulkan/system/vk_objects.h" class FString; class VkPPShader; class VkPPTexture; class VkPostprocess { public: VkPostprocess(); ~VkPostprocess(); void RenderBuffersReset(); void PostProcessScene(int fixedcm, const std::function &afterBloomDrawEndScene2D); void AmbientOccludeScene(float m5); void BlurScene(float gameinfobluramount); void ClearTonemapPalette(); private: void UpdateEffectTextures(); void CompileEffectShaders(); FString LoadShaderCode(const FString &lumpname, const FString &defines, int version); void RenderEffect(const FString &name); void NextEye(int eyeCount); void RenderScreenQuad(); std::map> mTextures; std::map> mShaders; const static int uniformbindingpoint = 7; }; class VkPPShader { public: std::unique_ptr VertexShader; std::unique_ptr FragmentShader; }; class VkPPTexture { public: std::unique_ptr Image; std::unique_ptr View; std::unique_ptr Staging; VkImageLayout Layout = VK_IMAGE_LAYOUT_UNDEFINED; };