#pragma once

#include <Core/Math/Matrix.h>
#include <Juliet.h>

namespace Juliet
{
    struct RenderPass;
    struct CommandList;
    struct Window;
    struct GraphicsPipeline;
    struct GraphicsDevice;

    struct SkyboxRenderer
    {
        GraphicsDevice*   Device;
        GraphicsPipeline* Pipeline;
    };

    [[nodiscard]] JULIET_API bool InitializeSkyboxRenderer(NonNullPtr<GraphicsDevice> device,
                                                           NonNullPtr<Window> window);
    JULIET_API void               ShutdownSkyboxRenderer();
    JULIET_API void               RenderSkybox(NonNullPtr<RenderPass> pass, NonNullPtr<CommandList> cmdList, const Matrix& viewProjection);

#if ALLOW_SHADER_HOT_RELOAD
    JULIET_API void ReloadSkyboxShaders();
#endif

} // namespace Juliet
