18 wgpu::VertexAttribute attribute;
19 attribute.format = format;
20 attribute.offset = offset;
21 attribute.shaderLocation = shaderLocation;
44 std::vector<ValidationError>
validate(
void)
const override
46 std::vector<ValidationError> errors;
49 errors.emplace_back(
"Array stride is not set (auto computation will be used)",
"VertexBufferLayout",
54 for (
const auto &[i, j] : duplicatedLocations)
57 fmt::format(
"Shader location {} is duplicated between attributes at index {} and {}",
64 for (
const auto &[i, j] : overlappingAttribute)
67 fmt::format(
"Attribute at index {} (format: {}, offset: {}, shaderLocation: {}) overlaps with "
68 "attribute at index {} (format: {}, offset: {}, shaderLocation: {})",
89 if (attributeEnd > maxEnd)
91 maxEnd = attributeEnd;
101 case wgpu::VertexFormat::Uint8:
return sizeof(uint8_t);
102 case wgpu::VertexFormat::Uint8x2:
return 2 *
sizeof(uint8_t);
103 case wgpu::VertexFormat::Uint8x4:
return 4 *
sizeof(uint8_t);
104 case wgpu::VertexFormat::Unorm8:
return sizeof(uint8_t);
105 case wgpu::VertexFormat::Unorm8x2:
return 2 *
sizeof(uint8_t);
106 case wgpu::VertexFormat::Unorm8x4:
return 4 *
sizeof(uint8_t);
107 case wgpu::VertexFormat::Float32x2:
return 2 *
sizeof(float);
108 case wgpu::VertexFormat::Float32x3:
return 3 *
sizeof(float);
109 case wgpu::VertexFormat::Float32x4:
return 4 *
sizeof(float);
116 std::vector<std::pair<uint64_t, uint64_t>> duplicatedIndices;
123 duplicatedIndices.push_back(std::make_pair(i, j));
127 return duplicatedIndices;
132 std::vector<std::pair<uint64_t, uint64_t>> overlappingIndices;
139 overlappingIndices.push_back(std::make_pair(i, j));
143 return overlappingIndices;
147 const wgpu::VertexAttribute &secondAttribute)
const
149 const uint32_t firstStart = firstAttribute.offset;
151 const uint32_t secondStart = secondAttribute.offset;
153 if ((firstStart < secondEnd) && (firstEnd > secondStart))
162 wgpu::VertexStepMode
stepMode = wgpu::VertexStepMode::Vertex;
Definition IValidable.hpp:26
std::vector< std::pair< uint64_t, uint64_t > > _getDuplicatedShaderLocation(void) const
Definition VertexBufferLayout.hpp:114
bool _doVertexAttributeOverlap(const wgpu::VertexAttribute &firstAttribute, const wgpu::VertexAttribute &secondAttribute) const
Definition VertexBufferLayout.hpp:146
VertexBufferLayout & setArrayStride(uint32_t stride)
Definition VertexBufferLayout.hpp:26
uint32_t getArrayStride() const
Definition VertexBufferLayout.hpp:38
const std::vector< wgpu::VertexAttribute > & getVertexAttributes() const
Definition VertexBufferLayout.hpp:42
~VertexBufferLayout() override=default
wgpu::VertexStepMode stepMode
Definition VertexBufferLayout.hpp:162
VertexBufferLayout & addVertexAttribute(wgpu::VertexFormat format, uint32_t offset, uint32_t shaderLocation)
Definition VertexBufferLayout.hpp:16
VertexBufferLayout & setStepMode(wgpu::VertexStepMode mode)
Definition VertexBufferLayout.hpp:32
std::vector< wgpu::VertexAttribute > vertexAttributes
Definition VertexBufferLayout.hpp:160
VertexBufferLayout()=default
std::optional< uint32_t > arrayStride
Definition VertexBufferLayout.hpp:161
std::vector< std::pair< uint64_t, uint64_t > > _getOverlappingVertexAttributes(void) const
Definition VertexBufferLayout.hpp:130
uint32_t _computeArrayStride() const
Definition VertexBufferLayout.hpp:83
uint32_t _getVertexFormatSize(wgpu::VertexFormat format) const
Definition VertexBufferLayout.hpp:97
wgpu::VertexStepMode getStepMode() const
Definition VertexBufferLayout.hpp:40
std::vector< ValidationError > validate(void) const override
Definition VertexBufferLayout.hpp:44
Definition DefaultSampler.hpp:6
@ Warning
Definition IValidable.hpp:13
@ Error
Definition IValidable.hpp:14