#pragma once #include "../dxvk_device.h" #include "dxvk_hud_item.h" #include "dxvk_hud_renderer.h" namespace dxvk::hud { /** * \brief HUD uniform data * Shader data for the HUD. */ struct HudUniformData { VkExtent2D surfaceSize; }; /** * \brief DXVK HUD * * Can be used by the presentation backend to * display performance and driver information. */ class Hud : public RcObject { public: Hud(const Rc& device); ~Hud(); /** * \brief Update HUD * * Updates the data to display. * Should be called once per frame. */ void update(); /** * \brief Render HUD * * Renders the HUD to the given context. * \param [in] ctx Device context * \param [in] surfaceSize Image size, in pixels */ void render( const Rc& ctx, VkSurfaceFormatKHR surfaceFormat, VkExtent2D surfaceSize); /** * \brief Adds a HUD item if enabled * * \tparam T The HUD item type * \param [in] name HUD item name * \param [in] args Constructor arguments */ template void addItem(const char* name, Args... args) { m_hudItems.add(name, std::forward(args)...); } /** * \brief Creates the HUD * * Creates and initializes the HUD if the * \c DXVK_HUD environment variable is set. * \param [in] device The DXVK device * \returns HUD object, if it was created. */ static Rc createHud( const Rc& device); private: const Rc m_device; Rc m_uniformBuffer; DxvkRasterizerState m_rsState; DxvkBlendMode m_blendMode; HudUniformData m_uniformData; HudRenderer m_renderer; HudItemSet m_hudItems; void setupRendererState( const Rc& ctx, VkSurfaceFormatKHR surfaceFormat); void resetRendererState( const Rc& ctx); void renderHudElements( const Rc& ctx); void updateUniformBuffer( const Rc& ctx, const HudUniformData& data); Rc createUniformBuffer(); }; }