Support explicit padding in mesh vertices

This commit is contained in:
Nikita Lisitsa 2020-09-10 11:06:06 +03:00
parent 30448d2ec1
commit 6e42502873

View file

@ -19,9 +19,17 @@ namespace psemek::gfx
struct normalized
{};
// skips a single attribute index
struct skip
{};
// skips bytes in the vertex
template <std::size_t N>
struct padding
{
static constexpr std::size_t size = N;
};
template <typename Attrib>
struct attrib_traits;
@ -148,6 +156,14 @@ namespace psemek::gfx
namespace detail
{
template <typename T>
struct is_padding : std::false_type
{};
template <std::size_t N>
struct is_padding<padding<N>> : std::true_type
{};
template <typename Attr>
std::size_t attr_size()
{
@ -155,6 +171,10 @@ namespace psemek::gfx
{
return 0;
}
else if constexpr (is_padding<Attr>::value)
{
return Attr::size;
}
else
{
return sizeof(typename attrib_traits<Attr>::attrib_type);
@ -192,6 +212,10 @@ namespace psemek::gfx
{
mesh_setup<Attribs...>::setup_impl(index + 1, offset, stride);
}
else if constexpr (is_padding<Attr1>::value)
{
mesh_setup<Attribs...>::setup_impl(index, offset + Attr1::size, stride);
}
else
{
using traits = attrib_traits<Attr1>;