Сортировка упакованных вершин с помощью тяги
Итак, у меня есть массив устройств структур PackedVertex:
struct PackedVertex {
glm::vec3 Vertex;
glm::vec2 UV;
glm::vec3 Normal;
}
Я пытаюсь отсортировать их так, чтобы дубликаты группировались в массиве; Меня не волнует общий порядок вообще.
Я пытался отсортировать их, сравнивая длины векторов, которые выполнялись, но не сортировал их правильно, поэтому теперь я пытаюсь по переменной, используя 3 stable_sorts с binary_operators:
__thrust_hd_warning_disable__
struct sort_packed_verts_by_vertex : public thrust::binary_function < PackedVertex, PackedVertex, bool >
{
__host__ __device__ bool operator()(const PackedVertex &lhs, const PackedVertex &rhs)
{
return lhs.Vertex.x < rhs.Vertex.x || lhs.Vertex.y < rhs.Vertex.y || lhs.Vertex.z < rhs.Vertex.z;
}
};
__thrust_hd_warning_disable__
struct sort_packed_verts_by_uv : public thrust::binary_function < PackedVertex, PackedVertex, bool >
{
__host__ __device__ bool operator()(const PackedVertex &lhs, const PackedVertex &rhs)
{
return lhs.UV.x < rhs.UV.x || lhs.UV.y < rhs.UV.y;
}
};
__thrust_hd_warning_disable__
struct sort_packed_verts_by_normal : public thrust::binary_function < PackedVertex, PackedVertex, bool >
{
__host__ __device__ bool operator()(const PackedVertex &lhs, const PackedVertex &rhs)
{
return lhs.Normal.x < rhs.Normal.x || lhs.Normal.y < rhs.Normal.y || lhs.Normal.z < rhs.Normal.z;
}
};
Беда в том, что я сейчас получаю ошибку: «launch_closure_by_value», из-за которой возникает угадывание, что мой вид не сходится из-за моих операторов.
При этом я также почти уверен, что для меня это не лучший способ сделать такого рода, поэтому любая обратная связь будет принята с благодарностью.