Skip to content
Snippets Groups Projects
VertexLayout.cpp 1.45 KiB
//
// Created by Charlotte on 28.05.2021.
//

#include "vkcv/VertexLayout.hpp"

namespace vkcv {
    uint32_t getFormatSize(VertexFormat format) {
        switch (format) {
            case VertexFormat::FLOAT:
                return 4;
            case VertexFormat::FLOAT2:
                return 8;
            case VertexFormat::FLOAT3:
                return 12;
            case VertexFormat::FLOAT4:
                return 16;
            case VertexFormat::INT:
                return 4;
            case VertexFormat::INT2:
                return 8;
            case VertexFormat::INT3:
                return 12;
            case VertexFormat::INT4:
                return 16;
            default:
                break;
        }
        std::cout << "VertexLayout: No format given" << std::endl;
        return 0;
    }

    VertexInputAttachment::VertexInputAttachment(uint32_t location, uint32_t binding, VertexFormat format, uint32_t offset) noexcept:
            location{location},
            binding{binding},
            format{format},
            offset{offset}
            {}

    VertexLayout::VertexLayout() noexcept :
    stride{0},
    attachmentMap()
    {}

    VertexLayout::VertexLayout(const std::vector<VertexInputAttachment> &inputs) noexcept {
        stride = 0;
        for (const auto &input : inputs) {
            attachmentMap.insert(std::make_pair(input.location, input));
            stride += getFormatSize(input.format);
        }
    }

}