Fixed wrong vertex buffer element count bug.

This commit is contained in:
ZY4N
2025-03-25 02:38:41 +01:00
parent bf0d85ec06
commit a78be71e34
3 changed files with 15 additions and 47 deletions

View File

@@ -39,50 +39,12 @@ void for_enabled_components(
}
template<typename C, typename... Ts>
vertex_buffer_metadata generate_metadata(
const C components,
std::span<Ts> buffers...
) {
auto meta = vertex_buffer_metadata{};
detail::for_enabled_components(
components,
ztu::specialised_lambda
{
// Visitor for scalar values
[&]<detail::numeric_type Component>(const std::span<Component>&, std::size_t index)
{
auto& component = meta.components[index];
component.type = type_utils::to_gl_type<Component>();
component.count = 1;
++meta.component_count;
},
// Visitor for numbers
[&]<detail::numeric_type Component, std::size_t Count>(const std::span<std::array<Component, Count>>&, std::size_t index)
{
auto& component = meta.components[index];
component.type = type_utils::to_gl_type<Component>();
component.count = Count;
++meta.component_count;
}
},
buffers...
);
for (const auto& component : std::span(meta.components).subspan(0, meta.component_count))
{
meta.stride += type_utils::size_of(component.type) * component.count;
}
return meta;
}
template<typename C, typename... Ts>
void interlace(
std::vector<ztu::u8>& vertex_buffer,
const C components,
const std::size_t element_count,
std::span<Ts> buffers...
) {
std::array<std::size_t, sizeof...(buffers)> byte_offsets;
@@ -100,11 +62,7 @@ void interlace(
buffers...
);
const auto vertex_count = std::min({
buffers.size()...
});
const auto buffer_size = stride * vertex_count;
const auto buffer_size = stride * element_count;
vertex_buffer.resize(buffer_size);
@@ -113,7 +71,7 @@ void interlace(
[&]<class Component>(const std::span<Component>& buffer, std::size_t index)
{
const auto byte_offset = byte_offsets[index];
for (const auto& value : buffer.subspan(0, vertex_count))
for (const auto& value : buffer.subspan(0, element_count))
{
std::memcpy(
&vertex_buffer[byte_offset],