FCT
载入中...
搜索中...
未找到
VK_InputLayout.cpp
浏览该文件的文档.
1//
2// Created by Administrator on 2025/3/23.
3//
4#include "../ThirdParty.h"
6#include "./VK_InputLayout.h"
7namespace FCT
8{
9 namespace RHI
10 {
12 {
13 m_ctx = context;
14 }
15
17 {
20
21 for (const auto& [slot, layout] : m_vertexLayouts) {
22 uint32_t stride = static_cast<uint32_t>(layout.getStride());
23 vk::VertexInputRate inputRate = ToVkVertexInputRate(m_inputRates[slot]);
24
25 m_bindingDescriptions.push_back(
26 vk::VertexInputBindingDescription(
27 slot,
28 stride,
30 )
31 );
32
33 for (size_t i = 0; i < layout.getElementCount(); i++) {
34 const VertexElement& element = layout.getElement(i);
35 const char* semantic = element.getSemantic();
36
37 int32_t location = m_shaderBinary.locationBySemantic(semantic);
38
39 if (location < 0) {
40 continue;
41 }
42
43 vk::Format format = ToVkFormat(element.getFormat());
44
45 uint32_t offset = static_cast<uint32_t>(layout.getElementOffset(i));
46
48 vk::VertexInputAttributeDescription(
49 static_cast<uint32_t>(location),
50 slot,
51 format,
52 offset
53 )
54 );
55 }
56 }
57
58 m_vertexInputStateInfo = vk::PipelineVertexInputStateCreateInfo(
59 vk::PipelineVertexInputStateCreateFlags(),
60 static_cast<uint32_t>(m_bindingDescriptions.size()),
62 static_cast<uint32_t>(m_attributeDescriptions.size()),
64 );
65
66 }
67 }
68}
std::map< uint32_t, VertexLayout > m_vertexLayouts
void inputRate(InputRate inputRate, uint32_t slot=0)
std::map< uint32_t, InputRate > m_inputRates
VK_InputLayout(VK_Context *context)
std::vector< vk::VertexInputBindingDescription > m_bindingDescriptions
vk::PipelineVertexInputStateCreateInfo m_vertexInputStateInfo
std::vector< vk::VertexInputAttributeDescription > m_attributeDescriptions
constexpr Format getFormat() const noexcept
constexpr const char * getSemantic() const noexcept
constexpr vk::VertexInputRate ToVkVertexInputRate(InputRate rate)
vk::Format ToVkFormat(Format format)