Program Listing for File ViewportHelper.hpp

Program Listing for File ViewportHelper.hpp#

Return to documentation for file (Src/GraphicsEngineVulkan/common/ViewportHelper.hpp)

#pragma once

#include <vulkan/vulkan.hpp>

namespace Kataglyphis {

// Every raster pass in this engine renders to the full extent of its target
// with an unflipped y axis and the standard [0, 1] depth range - there is no
// pass that needs a partial viewport, a flipped y, or a non-default depth
// range. A pass that DOES need one of those must build the vk::Viewport /
// vk::Rect2D inline and say why, rather than growing this helper new
// parameters - that is what would eventually let a flipped viewport or a
// depth slice silently sneak into every other call site.
constexpr vk::Viewport fullExtentViewport(vk::Extent2D extent)
{
    return vk::Viewport{ 0.0F,
        0.0F,
        static_cast<float>(extent.width),
        static_cast<float>(extent.height),
        0.0F,
        1.0F };
}

constexpr vk::Rect2D fullExtentScissor(vk::Extent2D extent) { return vk::Rect2D{ vk::Offset2D{ 0, 0 }, extent }; }

inline void setFullExtentViewportAndScissor(vk::CommandBuffer commandBuffer, vk::Extent2D extent)
{
    const vk::Viewport viewport = fullExtentViewport(extent);
    commandBuffer.setViewport(0, viewport);
    const vk::Rect2D scissor = fullExtentScissor(extent);
    commandBuffer.setScissor(0, scissor);
}

}// namespace Kataglyphis