Program Listing for File CubemapFaces.hpp

Program Listing for File CubemapFaces.hpp#

Return to documentation for file (Src/GraphicsEngineVulkan/scene/sky_box/CubemapFaces.hpp)

#pragma once

#include <cstddef>
#include <span>

namespace Kataglyphis {

// Returns true iff every face matches the first face's dimensions and none
// are degenerate. The cubemap upload copies `layerSize` bytes out of every
// face, so a face larger than the first reads off the end of an earlier
// allocation and a smaller one writes overlapping layers.
constexpr bool cubemapFacesConsistent(std::span<const int, 6> widths, std::span<const int, 6> heights)
{
    for (size_t i = 0; i < 6; ++i) {
        if (widths[i] <= 0 || heights[i] <= 0) { return false; }
        if (widths[i] != widths[0] || heights[i] != heights[0]) { return false; }
    }
    return true;
}

// The fallback face SkyBox uploads when a real face fails to load or the six
// faces disagree in size: one opaque-black RGBA8 texel. Shared with the test
// suite so the shipped byte pattern cannot drift from what is asserted here.
inline constexpr unsigned char kFallbackCubemapFacePixel[4] = { 0, 0, 0, 255 };

}// namespace Kataglyphis